2010-11-20 4 views
7

Je voudrais, si après qu'un utilisateur se connecte, qu'il redirige automatiquement vers leur emplacement précédent, mais cela ne semble jamais arriver, il redirige toujours à l'emplacement racine. De la lecture des docs sur concevoir pour cela, il semble que cette fonctionnalité est censée fonctionner. Est-ce que je l'utilise d'une manière ou d'une autre et/ou comment puis-je le forcer à stocker l'emplacement et à le rediriger malgré tout?concevoir sign_in_and_redirect ne semble jamais fonctionner

http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers#stored_location_for-instance_method

authentication = UserToken.find_by_provider_and_uid(omniauth['provider'], omniauth['uid']) 

if authentication 
    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => omniauth['provider'] 
    sign_in_and_redirect(:user, authentication.user) 
else 
+0

Je viens de me rendre compte que je ne reçois pas la fonctionnalité par défaut parce que je n'utilise pas le authorize_user! rappel qui stocke l'emplacement ... alors comment puis-je créer l'emplacement manuellement? – holden

+0

comment avez-vous résolu cela? Je suis https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview pour intégrer facebook login pour une application rails 3.2.5 avec Devise. La méthode sign_in_and_redirect ne fonctionne pas :( – asitmoharna

+0

J'ai eu le même problème, juste un manuel sign_in et une redirection séparée, vérifiez le code source de sign_in_and_redirect sign_in @user redirect_to root_path – MatthewFord

Répondre

4

de défilement vers le bas de this Google group page et de vérifier la méthode de substitution 'stored_location_for' élaborer. J'ai une version adaptée dans mon application_controller qui ressemble à ceci:

def stored_location_for(resource) 
    if current_user && params[:redirect_to] 
     flash[:notice] = "Congratulations, you're signed up!" 
     return params[:redirect_to] 
    end 
    super(resource) 
    end 

Cela devrait vous permettre de créer l'emplacement manuellement en passant dans un param « de redirect_to ».

Questions connexes