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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top