设计登录根路由轨道3

时间:2010-09-24 21:20:16

标签: ruby-on-rails ruby routes devise

Heyya 伙计。 所以我想到了这个酷炫的想法,如果你登录然后你得到某种仪表板,否则你得到一个信息/登录/注册页面..所以我该怎么做..

我主要想在Routes中做这件事=不像


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

提前感谢!

/ Oluf Nielsen

5 个答案:

答案 0 :(得分:80)

认为你可能一直在寻找这个:

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

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

注意:它是验证* d *

答案 1 :(得分:25)

我在我的应用中也想要这个,这就是我想出来的。

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

在Rails 3中,您可以使用Request Based Contraints动态映射root路由。上述解决方案适用于Devise身份验证gem,但可以进行修改以支持您自己的实现。

上述root_path/将针对未经身份验证的请求路由到WelcomeController#index操作。当用户登录时,相同的root_path将路由到UsersController#dashboard

希望这有帮助。

答案 2 :(得分:21)

我有同样的问题,我解决了这个问题:

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

希望它有所帮助。

答案 3 :(得分:4)

你在过滤器之前使用设计吗?

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

为什么不尝试更改默认登录视图,以便他们拥有您想要的信息/登录/注册信息。

答案 4 :(得分:0)

这就是我现在在应用程序布局文件中使用的内容。尚未将其分解为部分内容:

            <% 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 %>
相关问题