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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top