2016-03-23 68 views
8

我想使用離子框架爲fb登錄創建rails api。到目前爲止,我已經成功創建了一個基於Web的應用程序,併成功通過Facebook進行身份驗證。帶有Ionic的fb登錄的Rails API

現在我想要做同樣的事情,但使用基於離子的應用程序。

有問題?

  1. 是否有可能使用omniauth編寫rails api並使用帶有離子的fb身份驗證api。
  2. 如果它是(1)可能比什麼樣的json請求被做或返回。

在網上找不到任何關於它的東西,也沒有任何帶有離子(fb登錄)的rails的github項目。

我當前的代碼:

控制器:

class SessionsController < ApplicationController 
    def create 
    user = User.from_omniauth(env["omniauth.auth"]) 
    session[:user_id] = user.id 
    redirect_to root_url 


    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_url 
    end 
end 

型號:

class User < ActiveRecord::Base 
    def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_initialize do |user| 
     user.provider = auth.provider 
     user.uid = auth.uid 
     user.name = auth.info.name 
     user.oauth_token = auth.credentials.token 
     user.oauth_expires_at = Time.at(auth.credentials.expires_at) 
     user.save! 
    end 
    end 
end 

初始值設定:

OmniAuth.config.logger = Rails.logger 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, "123", "abc" 
end 
+1

我認爲你正在尋找oauth2客戶端認證(nevermind omniauth,並假定rails後端不存在)。 http://blog.ionic.io/oauth-ionic-ngcordova/ –

回答

0

我不知道是否可能?但我認爲你不應該使用同樣的邏輯。

Rails的facebook omniauth流是基於會話的,而Ionic應用程序大多是「訪問令牌」,也就是說你使用身份驗證公開Rails API。

另外,在Ionic中,您有一些優勢:您可以使用Ionic Native Facebook Connect Plugin訪問本地Facebook登錄,這爲已安裝Facebook的用戶提供了更好的用戶體驗。

我有同樣的問題,我完成的工作是首先了解身份驗證如何適用於單頁面應用程序。爲此,我建議您閱讀"Authentication for single single page apps"

我的最終解決方案是這樣的:

enter image description here

我使用的工具:

你可以看到一個例子Rails應用在https://github.com/muZk/rails5-api-jwt-facebook-auth

檢索給出一個有效的Facebook的身份驗證令牌有效的JWT令牌創建後臺後,愛奧尼亞部分應該是這樣的:

this.fb.login(['public_profile', 'user_friends', 'email']) 
    .then((res: FacebookLoginResponse) => post('your-rails-backend.com/api/auth/facebook', { access_token: FacebookLoginResponse.accessToken })) 
    .then(res => console.log('This is your JWT for your rails API:', res.accessToken)) 

我知道這不是一個複製粘貼解決方案,但我希望我已經幫你解決了一些問題。