2017-06-22 1 views
0

J'ai l'authentification Facebook implémentée avec succès en utilisant le omniauth-facebook gem avec Devise. Cependant, ce que je veux faire est, après Facebook authentifie, les rediriger vers un formulaire où ils peuvent spécifier leur mot de passe (et confirmation de mot de passe) avant que l'enregistrement est créé.Rails - Obtenir des champs supplémentaires lors de l'enregistrement de Facebook Omniauth

Comment est-ce que je peux faire ceci?

Mon code est assez standard basé sur la documentation de la pierre précieuse:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 

    def facebook 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 

    if @user.persisted? 
     sign_in_and_redirect @user, :event => :authentication 
     set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? 
    else 
     session["devise.facebook_data"] = request.env["omniauth.auth"] 
     redirect_to new_user_registration_url 
    end 
end 

    def failure 
    redirect_to root_path 
    end 
end 

user.rb

def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    user.username = auth.info.name.downcase.gsub(" ", "")  
    end 
end 
+0

, qui est le but de l'omniauth, l'utilisateur ne doit pas se rappeler password..just curieux, pourquoi voudriez-vous que? –

+0

vrai. En fait, je veux d'autres domaines, aussi. comme leur pays. – yellowreign

Répondre

0

Si je comprends bien, vous avez besoin à l'utilisateur de remplir une page profile avant naviguer à travers l'application .. quelque chose comme ce qui suit devrait aider ..

dans votre application_controller.rb,

def after_sign_in_path_for(resource) 
    resource.profile_complete? ? root_path : user_profile_path(resource) 
end 

Devise Wiki

bien