Domanda

Quindi ho un percorso personalizzato elegante per il login

# routes.rb
map.login '/login', :controller => 'sessions', :action => 'new'

Visita www.asite.com/login e sei lì. Come è personalizzato con login non riuscito, tuttavia, nella nostra azione faremo quanto segue. Nota cosa succede al login fallito.

 # sessions_controller.rb

 def create
   self.current_user = User.authenticate(params[:email], params[:password])
   if logged_in?
     # some work and redirect the user
   else
     flash.now[:warning] = "The email and/or password you entered is invalid."
     render :action => 'new'
   end
 end

Questo è molto tipico. Basta eseguire il rendering della nuova azione e richiedere nuovamente l'accesso. Purtroppo hai anche un brutto URL: www.asite.com/session. Ick! È possibile ottenere il rendering per rispettare l'URL originale?

Nessuna soluzione corretta

Altri suggerimenti

Il tuo problema è questo: l'utente prima visita / login e compila il modulo. Quando inviano il modulo, POST in / sessioni , motivo per cui l'URL del browser cambia. Per aggirare questo, puoi fare due cose:

Come menzionato da Michael, puoi reindirizzare a: nuova azione, cambiando il resto in:

 else
   flash[:warning] = "The email and/or password you entered is invalid."
   redirect_to login_path
 end

Nota che dovrai cambiare il flash in modo che il messaggio sia disponibile nella prossima richiesta (dopo il reindirizzamento).

Il secondo metodo è leggermente più hacker, ma forse vale la pena menzionarlo. Utilizzando le condizioni sui percorsi, è possibile mappare sia il modulo di accesso (che è un OTTENERE) sia l'invio del modulo (che è un POST) sullo stesso percorso. Qualcosa del tipo:

map.login '/login',
  :controller => 'sessions', :action => 'new', 
  :conditions => {:method => :get}

map.login_submit '/login',
  :controller => 'sessions', :action => 'create', 
  :conditions => {:method => :post}

Quindi, se l'azione del modulo è il percorso di invio del login, le cose dovrebbero funzionare come previsto.

Cambia render: action = > 'new' in redirect_to login_path

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top