Rails API 用于使用 Ionic 登录 fb

Rails API for fb login with Ionic

我想使用 ionic 框架构建一个 rails api 用于 fb 登录。到目前为止,我已经成功创建了一个基于 Web 的应用程序,并且它已成功通过 Facebook 进行身份验证。

现在我想做同样的事情,但使用基于离子的应用程序。

有问题吗?

  1. 是否可以使用 omniauth 并使用带有 ionic 的 fb 身份验证 api 编写 rails api。
  2. 如果它 (1) 是可能的,那么将提出或返回哪种 json 请求。

在网上找不到任何关于它的信息,也找不到 rails 的任何 github 项目与离子(fb 登录)。

我的当前代码:

控制器:

  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

我不确定是否可行...但我认为您不应该使用相同的逻辑。

Rails facebook omniauth 流程是基于会话的,而 Ionic 应用程序大多是基于 "access token" 的,即你公开一个 Rails API 并进行身份验证。

此外,在 Ionic 中,您还有一些优势:您可以使用 Ionic Native Facebook Connect Plugin 访问本机 Facebook 登录,这为安装了 Facebook 的用户提供了更好的用户体验。

我遇到了同样的问题,我完成的工作是首先了解身份验证如何用于单页应用程序。为此,我建议您阅读 "Authentication for single single page apps".

我的最终解决方案如下所示:

我使用的工具:

您可以在 https://github.com/muZk/rails5-api-jwt-facebook-auth

查看一个示例 rails 应用程序,用于在给定有效的 facebook 身份验证令牌的情况下检索有效的 JWT 令牌

创建后端后,Ionic 部分应该是这样的:

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))

我知道这不是复制粘贴解决方案,但我希望我对您的问题有所帮助。