Acts_AS_Paranoide Eliminato dall'utente di DEVISI
-
29-10-2019 - |
Domanda
Ho un'app RAILS 3.1.3 che utilizza devise
per gli utenti di autenticazione e li condotti con soft con acts_as_paranoid
. Voglio che gli account vengano slogati su password ricreativa, iscriversi all'utente e accedere all'utente, quindi se forniscono un'e -mail eliminata, prendo quell'account, lo rendi di nuovo in vita e quindi continuo con l'azione (ricreazione password o accedi ).
Ma nel Users::SessionsController#create
Azione, dopo la sottosquazione dell'utente, ottiene un errore non autorizzato (ma l'utente dovrebbe ora essere visibile). Il codice è:
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
Se aggiungo un resource.reload
Chiama dopo il sottotevolo non cambia nulla. E se accedo di nuovo, l'utente viene normalmente accettato, poiché non è stato sieduto nel tentativo precedente.
Perché sta succedendo? Come posso ottenerlo underied e firmare in un singolo create
chiamata?
Soluzione
Risolto con il seguente frammento di codice:
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