77 votes

Concevoir une déconnexion automatiquement après le changement de mot de passe

En Devise, si je change le mot de passe utilisateur et après qu’il est mis à jour dans la BD, le site immédiatement se déconnecte l’utilisateur. Je ne veux pas ce comportement - comment dois-je faire cela. Aider, s'il vous plaît.

130voto

Bill Eisenhauer Points 4700

J’ai eu le même problème et le code suivant semble fonctionner pour moi.

Supposent que le contrôleur de mots de passe pour un itinéraire de singleton. En outre, supposons que le modèle authentifié est un compte. Avec cela, vous avez ce qui suit :

L’ingrédient principal est l’appel de méthode sign_in qui cherche à re-signer-dans le compte, mais ignore les rappels préfet stocke le compte dans la session.

11voto

Jason H Points 111

L'exemple ci-dessus n'a pas fonctionné pour moi, en utilisant plusieurs champs d'application dans Imaginer.

J'ai dû ajouter de la portée/nom de la ressource dans le sign_in chemin pour que cela fonctionne, et pour éviter le chaos, j'ai aussi eu à signer l'ancien utilisateur ou de l'autre de toutes sortes de confusion abonde.

Les modifications que j'avais à faire serait de ressembler à quelque chose comme ceci en utilisant l'exemple ci-dessus.

def update
   if current_account.update_with_password(params[:account])
     sign_out(current_account)
     sign_in(:account, current_account, :bypass => true)
     flash[:notice] = 'Password updated.'
     redirect_to account_path
   else
     render :action => :show
   end
end

Edit: je pense que j'ai dû forcer la déconnexion de l'utilisateur parce que quelque part j'ai changé de Concevoir du code afin de ne pas avoir les utilisateurs de signe au cours de certaines actions. En recul; pas une bonne idée! Cette approche est beaucoup mieux! Étant qu'il est plus sûr de faire vos propres Contrôleurs rapport primordial de Concevoir du code, sauf si c'est absolument inévitable.

11voto

Ali Points 93

Ce code permet d’éviter la déconnexion.

4voto

Ramiz Raja Points 1558

Ajouter le morceau de code suivant à votre méthode dans laquelle vous mettez à jour le mot de passe, juste après la mise à jour de mot de passe de l’utilisateur dans la base de données :

0voto

Jared Beck Points 4975

Utiliser le module enregistrable, qui vous donnera les deux signe vers le haut et modifier les fonctionnalités de l’utilisateur

https://github.com/plataformatec/devise/wiki/How-to  :-Allow-users-to-edit-their-password

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X