2012-04-07 22 views
9

Ecco cosa ho per il reindirizzamento a un URL di default (myapp_url). Ma voglio cambiare il reindirizzamento per andare alla richiesta l'url è stato inserito dall'utente dopo l'autenticazione. Come faccio? Ho provato un paio di opzioni dalla ricerca qui, come: indietro. Ma non andare.ruby ​​rails - reindirizza all'url di richiesta originale

L'utente inserisce un URL, se non autenticato, quindi viene reindirizzato alla pagina di accesso, quindi dopo l'utente di accesso deve essere reindirizzato all'url di richiesta originale.

def create 
    user = User.Authenticate(params[:user_id], params[:password]) 
if user 
    session[:user_id] = user.id 
    redirect_to myapp_url, :notice => "Logged in!" 
else 
    flash.now.alert = "Invalid email or password" 
    render "new" 
    end 

end 
+0

Hai trovato una soluzione? –

+0

@ Aldo'xoen'Giambelluca - Non ancora. –

+0

Questa soluzione ha funzionato per me: http://stackoverflow.com/questions/9835365/devise-how-to-redirect-to-different-page-based-on-some-parameter-after-sign-in – rassom

risposta

1

è necessario salvare percorso nella sessione prima di reindirizzamento autenticazione, e dopo auth successo redirect a questo percorso.

+0

I provato questo, ma senza fortuna. 'session [: return_to] || = request.referer'' redirect_to session [: return_to] ' –

12

È possibile leggere the chapter about "Friendly forwarding" nel "Tutorial Ruby on Rails" di Michael Hartl per vedere come è possibile implementarlo facilmente.

Fondamentalmente si hanno 3 metodi di supporto:

  1. store_location per memorizzare l'utente posizione desiderata nella sessione
  2. redirect_back_or(url) reindirizzare l'utente alla posizione memorizzata nella sessione o, se non impostato, alla posizione contenuta nella url metodo param
  3. e clear_return_to utilizzati "internamente" dal metodo redirect_back_or per cancellare questa informazione, una volta utilizzato

E poi si utilizzano questi metodi:

A) quando si vede un utente ospite tenta di accedere a una pagina che richiede l'uso di autenticazione store_location prima di lui reindirizzamento alla pagina di login.
B) quando un utente è connesso, è possibile utilizzare redirect_back_or(url) a lui reindirizzare al posto giusto (se presente ovviamente)

Questa è una panoramica di come questo lavoro, si ottiene l'idea, ma vi suggerisco di leggere che capitolo per l'implementazione (pochi) dettagli.

+0

Può essere implementato con una richiesta di post? Di 'che stai inviando un modulo e che la sessione è scaduta prima dell'invio. L'esempio di Michael Hartles potrebbe causare un errore di routing. Penso che Rails tenterà di ottenere una richiesta dopo aver effettuato l'accesso. Ad esempio, supponiamo di avere "Post" e "commenti", dove i commenti sono annidati sotto i post, e l'invio di commenti avviene dal Post show. L'URL risultante dopo l'accesso sarebbe 'app.com/posts/1/comments' causando un errore di routing, che non sarebbe il caso se la richiesta fosse POST. – Mohamad

+1

I reindirizzamenti vengono inviati dal browser come richieste GET. Anche se hai reindirizzato il browser come POST, i dati di invio del modulo originale non verranno forniti. – kgilpin

+0

Il link del tutorial nella risposta è morto, ecco un link aggiornato: https://www.railstutorial.org/book/_single-page#sec-friendly_forwarding – Nilloc

Problemi correlati