Ich entwickle eine RoR-Anwendung mit Facebook-Login. Ich habe zwei Arten von Benutzern (d. H. Die Admins und die Benutzer) und beide können sich mit Facebook einloggen.Facebook Login mit Ruby on Rails mit omniauth-facebook gem
Ich möchte den Admin auf eine bestimmte Aktion auf dem Controller und den Client auf eine andere Aktion umleiten. Also habe ich versucht, dies:
Meine Routen:
get 'auth/:provider/callback/admin', to: 'sessions#create_admin'
get 'auth/:provider/callback/client', to: 'sessions#create_client'
Mein Controller:
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
Mein 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})
});
Aber gibt den Fehler für beide:
undefined method `info' for nil:NilClass
Wenn ich von meinen Routen den Benutzertyp entferne, wie unten, funktioniert es.
get 'auth/:provider/callback', to: 'sessions#create'
Was ist der bessere Weg, das zu tun? Kann ich params nach Omaniauth schicken?