繁体   English   中英

Facebook使用omniauth-facebook gem登录Ruby on Rails

[英]Facebook login with Ruby on Rails using omniauth-facebook gem

我正在使用Facebook登录名开发RoR应用程序。 我有两种类型的用户(即管理员和用户),两者都可以通过Facebook登录。

我想将管理员重定向到控制器上的特定操作,并将客户端重定向到另一个操作。 所以我试过这个:

我的路线:

get 'auth/:provider/callback/admin', to: 'sessions#create_admin'
get 'auth/:provider/callback/client', to: 'sessions#create_client'

我的控制器:

def create_admin
  auth = env["omniauth.auth"]
  user = Spree::User.find_by(email: auth.info.email)

  redirect_from_oauth(user) and return if user.present?

  user = Spree::User.from_omniauth(auth, "admin")
  redirect_to setup_step1_path(uid: user.id, t: user.confirmation_token)
end

def create_client
  auth = env["omniauth.auth"]
  user = Spree::User.find_by(email: auth.info.email)
  user = Spree::User.from_omniauth(auth, "client") unless user.present?

  redirect_back_or_default(root_path)
end

我的JavaScript:

$('.facebook-btn').click(function(e) {
  var userType = $(this).data('type');

  return FB.login(function(response) {
    if (response.authResponse) {
      return window.location = '/auth/facebook/callback/' + userType;
    }
  }, {scope: 'email,public_profile', return_scopes: true})
});

但是给出了两个错误:

undefined method `info' for nil:NilClass

当我从我的路线中删除用户类型时,如下所示,它可以正常工作。

get 'auth/:provider/callback', to: 'sessions#create'

有什么更好的方法呢? 我可以将参数发送给omaniauth吗?

如果您使用Devise进行身份验证,并且您的模型User具有adminclient属性,则可以在application_controller.rb上执行以下操作:

  def after_sign_in_path_for(resource)
    if resource.admin?
      your_admin_path_here
    elsif resource.client?
      your_client_path_here
    end
  end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM