2010-09-24 27 views
35

Heyya ragazzi. Quindi ho pensato a questa idea di coolio, se hai effettuato l'accesso allora ottieni una sorta di dashboard, altrimenti ottieni una pagina di informazioni/login/registrazione .. Quindi come faccio ...Devise login root route rails 3

per fare questo in Routes = non qualcosa come


def index 
    if current_user.present? 
    render :action => 'logged_in' 
    else 
    render :action => 'logged_out' 
    end 
end 

grazie in anticipo!

/Oluf Nielsen

risposta

79

ritiene di essere stato alla ricerca di questo:

authenticated :user do 
    root :to => "dashboard#show" 
end 

root :to => "devise/sessions#new" 

Nota: si tratta di autenticare * d *

+0

Grazie! Esattamente quello che volevo fare! –

+1

Questo non ha funzionato per me, perché volevo che il percorso non registrato per indicare qualcos'altro come sessioni # nuove. La risposta di Shayne tuttavia funziona in questi casi ed è stata la soluzione per me ... chiarire: se si imposta la seccond root: per accedere a qualcosa di diverso da devise/sessions # new reindirizzerà ancora un utente non autenticato alle sessioni # new. – effkay

+5

So che sono in ritardo, ma se usi '' 'authenticated: user''' (nota la" d ") dovrebbe funzionare come previsto –

4

stai usando inventare di prima filtri?

class FooController < ActionController::Base 
    before_filter :authenticate_user! 
... 

Perché non provare a modificare le viste d'accesso di default in modo da avere le informazioni di login/informazioni/iscrizione che si desidera.

+0

Questo non è quello che voglio .. voglio fare due >> root: to => "welcome # index" << - o qualcosa del genere, quando non sei loggato, e qualcosa del tipo >> root: to => "dashboard # index" << - Quando hai effettuato l'accesso .. –

0

Ecco cosa sto usando nel mio file di layout dell'applicazione in questo momento. Non l'ho ancora suddiviso in partial:

  <% if user_signed_in? %> 
       <a href="/profile"><%= current_user.email %></a> | 
       <%= link_to "Logout", destroy_user_session_path %> 
      <% else %> 
       <%= link_to "Login", new_user_session_path %> | 
       <%= link_to "Register", new_user_registration_path %> 
      <% end %> 
+0

come ho detto nell'altro, "Questo non è quello che voglio .. voglio fare due >> root: to = > "welcome # index" << - o qualcosa del genere, quando non sei loggato, e qualcosa come >> root: to => "dashboard # index" << - Quando sei loggato .. " –

+0

In In tal caso, scrivi un before_filter nel tuo metodo di root predefinito (quello che punta a welcome # index) che controlla se l'utente è loggato e, in tal caso, redirect_to dashboard # index. Non ha nemmeno bisogno di essere un before_filter, puoi farlo direttamente nel metodo index. –

+0

beh, questo è ciò a cui BaroqueBobcat ha scritto, quindi se non c'è altro modo per farlo accetto che è una soluzione. Grazie per l'aiuto :-)! –

25

Anche io volevo questo nella mia app, ecco cosa mi è venuta in mente.

MyCoolioApp::Application.routes.draw do 
    root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? } 
    root :to => 'welcome#index' 

    get "/" => 'users#dashboard', :as => "user_root" 

    # .. 
end 

in Rails 3 è possibile utilizzare Request Based Contraints per mappare dinamicamente il percorso root. La soluzione sopra funziona per la gemma di autenticazione Devise ma può essere modificata per supportare la propria implementazione.

Con il precedente numero root_path o / si indirizza a un'azione WelcomeController#index per richieste non autenticate. Quando un utente è connesso allo stesso root_path si dirigerà a UsersController#dashboard.

Spero che questo aiuti.

+0

Questo è esattamente quello che stavo cercando. Come potrei scrivere i test di routing per questo usando RSpec, però? Non sembra 'autenticare?' È disponibile nell'ambiente di test? Gradirei qualsiasi consiglio ... grazie. – neezer

+0

Ho dovuto aggiungere un ambito per farlo funzionare: request.env ["warden"]. Authenticate? (: Scope =>: user) – hb922

+0

Inoltre, il nuovo dispositivo ha un nuovo metodo chiamato authenticated, che fa questo per te – hb922

21

Ho lo stesso problema e ho risolto con questo:

authenticated :user do 
    root :to => "wathever#index" 
end 
unauthenticated :user do 
    devise_scope :user do 
    get "/" => "devise/sessions#new" 
    end 
end 

Spero che sia d'aiuto.

+4

Questo era esattamente ciò di cui avevo bisogno. Grazie per aver postato !! :) – Kirk

+2

Questo ha funzionato, ma invece di ottenere "/" => ... Ho fatto il root di: "escogitare/sessioni # nuovo" e ha funzionato, probabilmente la stessa cosa - grazie! –

+1

Bello, ha funzionato per me! –