我正在使用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'
更好的方法是什么?我可以将params发送给omaniauth吗?
答案 0 :(得分:0)
如果您使用设计进行身份验证,并且您的模型用户具有 admin 和客户端属性,则可以执行以下操作,{ {1}}:
application_controller.rb