2010-09-24 28 views
35

Heyya chicos. Así que pensé en esta idea coolio, si estás conectado, entonces obtienes algún tipo de tablero, de lo contrario obtienes una página de información/inicio de sesión/registro ... Entonces, ¿cómo hago eso ...idear raices de ruta raíz iniciadas 3

En su mayoría quiero para hacer esto en Rutas = no algo así como


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

¡gracias de antemano!

/Oluf Nielsen

Respuesta

79

cree que puede haber estado buscando esto:

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

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

Nota: es autenticar * d *

+0

¡Gracias! ¡Exactamente lo que quería hacer! –

+1

Esto no funcionó para mí, ya que quería que los no registrados en la ruta apuntaran a algo más como sesiones # new. Sin embargo, la respuesta de Shayne funciona en esos casos y fue la solución para mí ... aclarar: si configuras la segunda raíz: para ingresar en cualquier otra cosa que no sea idea/sessions # new, redirigirá a un usuario no autenticado a las sesiones # new. – effkay

+5

Sé que llego tarde, pero si usa '' 'authenticated: user''' (observe la" d ") debería funcionar como se esperaba –

4

está usando diseñar filtros de antes?

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

¿Por qué no intenta modificar los puntos de vista de inicio de sesión predeterminado para que tengan la información informaciones Registrar/login/desee.

+0

Eso no es lo que quiero ... quiero hacer dos >> root: to => "welcome # index" << - o algo así, cuando no estás conectado, y algo así como >> root: to => "dashboard # index" << - Cuando haya iniciado sesión ... –

0

Esto es lo que estoy usando en el archivo de diseño de mi aplicación en este momento. Todavía no hemos dividido en parciales:

  <% 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

como dije en el otro, "Eso no es lo que quiero ... quiero hacer dos >> root: to = > "welcome # index" << - o algo así, cuando no has iniciado sesión, y algo así como >> root: to => "dashboard # index" << - Cuando hayas iniciado sesión ... " –

+0

In en ese caso, escriba un before_filter en su método raíz predeterminado (el que apunta a welcome # index) que verifica si el usuario ha iniciado sesión y, de ser así, redireccione al panel # index. Ni siquiera necesita ser un before_filter, puede hacerlo directamente en el método de índice. –

+0

bueno, eso es lo que escribió BaroqueBobcat, así que si no hay otra forma de hacerlo, acepto su solución. Gracias por la ayuda :-)! –

25

Yo también quería esto en mi aplicación, esto es lo que se me ocurrió.

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 

En Rails 3 se puede utilizar para asignar dinámicamente Request Based Contraints su ruta root. La solución anterior funciona para la gema de autenticación Devise, pero puede modificarse para admitir su propia implementación.

Con la anterior root_path o / se enrutará a una acción WelcomeController#index para solicitudes no autenticadas. Cuando un usuario inicia sesión en el mismo root_path se enrutará al UsersController#dashboard.

Espero que esto ayude.

+0

Esto es exactamente lo que estaba buscando. Sin embargo, ¿cómo podría escribir pruebas de enrutamiento para esto usando RSpec? ¿No parece que 'authenticar?' Está disponible en el entorno de prueba? Agradecería cualquier orientación ... gracias. – neezer

+0

Tuve que agregar un alcance para ponerlo en funcionamiento: request.env ["warden"]. Authenticate? (: Scope =>: user) – hb922

+0

también, el nuevo dispositivo tiene un nuevo y genial método llamado authenticated, que hace esto por usted – hb922

21

que tienen el mismo problema y lo resolvió con esto:

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

Espero eso ayude.

+4

Esto era exactamente lo que necesitaba. ¡¡Gracias por publicar!! :) – Kirk

+2

Esto funcionó, pero en lugar de get "/" => ... lo hice root a: "idear/sesiones # nuevo" y funcionó, probablemente lo mismo - ¡gracias! –

+1

¡Bueno, funcionó para mí! –

Cuestiones relacionadas