Annuler la suppression de l'utilisateur actes_as_paranoid lors de la connexion à l'appareil
-
29-10-2019 - |
Question
J'ai une application Rails 3.1.3 qui utilise devise
pour l'authentification des utilisateurs et les supprime de manière logicielle avec acts_as_paranoid
.Je souhaite que les comptes soient restaurés lors de la recréation du mot de passe, de l'inscription de l'utilisateur et de la connexion de l'utilisateur. Ainsi, s'ils fournissent un e-mail supprimé, je récupère ce compte, le fais revivre, puis je poursuis l'action (recréation du mot de passe ou connexion). ).
Mais dans le Users::SessionsController#create
action, après la restauration de l'utilisateur, il obtient une erreur non autorisée (mais l'utilisateur devrait maintenant être visible).Le code est :
def create
# Take into account acts_as_paranoid deleted users
resource = resource_class.only_deleted.find_by_email(params[resource_name][:email])
resource.undelete! if resource
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
Si j'ajoute un resource.reload
appelez après la restauration, cela ne change rien.Et si je me reconnecte, l'utilisateur est normalement connecté, car il n'a pas été supprimé lors de la tentative précédente.
Pourquoi cela arrive-t-il?Comment puis-je le récupérer et me connecter en un seul clic create
appel?
La solution
Résolu avec l'extrait de code suivant :
def create
# Take into account acts_as_paranoid deleted users
if (resource = resource_class.only_deleted.find_by_email(params[resource_name][:email]))
resource.undelete!
# Copied from Warden::Strategies database_authenticatable:
sign_in resource if resource.valid_password?(params[resource_name][:password])
end
super
end