Devise se déconnecter automatiquement après le changement de mot de passe

Dans Devise, si je modifie le mot de passe de l’utilisateur et qu’il est mis à jour dans la firebase database, le site déconnecte immédiatement l’utilisateur. Je ne veux pas ce comportement – comment puis-je le faire? s’il vous plaît aider.

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

Supposons que le contrôleur de mots de passe est défini pour un itinéraire singleton. Supposons également que le modèle authentifié est un compte. Avec cela, vous avez les éléments suivants:

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

L’ingrédient clé est l’appel à la méthode sign_in qui cherche à rouvrir le compte, mais contourne les rappels du gardien et stocke le compte dans la session.

L’exemple ci-dessus n’a pas fonctionné pour moi en utilisant plusieurs scopes dans Devise.

Je devais append le nom de la scope / ressource dans le chemin de sign_in pour que cela fonctionne, et pour éviter le chaos, je devais également déconnecter l’ancien utilisateur ou toute confusion pouvait survenir.

Les changements que je devais faire ressembleraient à 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 

Modifier pour append: je crois que je devais forcer la déconnexion de l’utilisateur car quelque part, j’ai annulé le code de Devise afin que les utilisateurs ne se déconnectent pas pendant certaines actions. Avec le recul; pas une bonne idée! Cette approche est bien meilleure! Étant donné qu’il est plus sûr de créer vos propres contrôleurs que de remplacer le code de Devise, à moins que cela ne soit absolument inévitable.

Utilisez ce code pour éviter la déconnexion.

 sign_in(current_user, :bypass => true) 

Vous pouvez simplement définir sign_in_after_reset_password dans votre devise.rb

 config.sign_in_after_reset_password = true 

Ajoutez le morceau de code suivant à votre méthode dans laquelle vous mettez à jour le mot de passe de l’utilisateur, juste après la mise à jour du mot de passe de l’utilisateur dans la firebase database:

 def update . . . . . . . . . . sign_in(@user, :bypass => true) . . . . . . . . . . end 

Pour certaines raisons, current_user n’est pas égal à @user bien que current_user.id soit égal à @user.id Je dois donc utiliser sign_in(@user, :bypass => true) .

Utilisez le module enregistrable, qui vous donnera à la fois l’inscription et la modification des fonctionnalités de l’utilisateur

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

Mise à jour de la réponse de Bill Eisenhauer ci-dessus-

sign_in(current_account, :bypass => true) a été déconseillé utilisez bypass_sign_in current_account place

Plus de détails peuvent être trouvés ici