设计:将登录页面注册为欢迎/登陆页面,然后注册到用户配置文件

使用设计,如何将我的注册作为我的登陆/欢迎页面,然后在注册后,他们进入网站内的个人资料/登录区域?

我试图找出如何使它像Facebook在网站的两个方面; 注册或登录后,仅限用户使用外部(注册,关于,联系等)和内部(个人资料,注销等)。

谢谢。

PS我是Ruby on Rails的新手并创建应用程序,但我确实使用Rails 3 Tutorial进行身份validation系统,我了解大多数事情开始使用Devise,我不知道从这种情况开始。

我打算使用2个应用程序布局,1个在注册之前是layouts / welcome.html.erb和PagesController(about,terms等),另一个用于登录用户,它们将是layouts / application.html.erb和ApplicationController (个人资料,新闻,补充等),这是最好的步骤吗?

在您的routes.rb中:

root :to => 'welcome#index' 

欢迎的是控制器,索引是动作。

在您的应用程序控制器

 def after_sign_in_path_for(user) "/url_you_want_to_redirect_to/" end 

这是我使用Rails 3.1.0和Devise 1.5.0新方法和更新方式:

的routes.rb

 root :to => "pages#redirect_to_sign_up" devise_for :users do get "welcome" => "devise/registrations#new", :as => :new_user_registration get "account_settings" => "devise/registrations#edit" get "sign_in" => "devise/sessions#new" get "sign_out" => "devise/sessions#destroy" get "new_password", :to => "devise/passwords#new" end match 'home', :to => "user_pages#home" namespace :user do root :to => "user_pages#home" end 

application_controller.rb

 class ApplicationController < ActionController::Base protect_from_forgery protected def after_sign_in_path_for(resource) stored_location_for(:user) || root_path end private def after_sign_out_path_for(resource) stored_location_for(:user) || root_path end end 

pages_controller.rb

 class PagesController < ApplicationController def redirect_to_sign_up if signed_in?.blank? redirect_to new_user_registration_path else redirect_to home_path end end end 

user_pages_controller.rb

 class UserPagesController < ApplicationController before_filter :authenticate_user! def home end def profile end end 

我发现最简单的方法是根据所需的经过身份validation的登录页面,只需使用before_filter强制用户首先通过before_filter登录/注册。

在这种情况下,假设您的“登录区域”是一个名为profile / index的控制器/操作。

在routes.rb中,将根目录设置为profile / index。

 root :to => 'profile#index' 

然后在profile_controller中,设置以下before_filter。

 before_filter :authenticate_user! 

这将自动将登录用户(或之前登录的用户并设置记住我的cookie)直接推送到配置文件页面。 任何未经身份validation的用户都将自动以登录方式结束。 您还希望该页面上的链接(或单独的标签)也可以注册。

在根页面上检查用户是否已登录,并根据该用户重定向。

 redirect_to sign_up_path if current_user.nil? 

或者,您可以渲染不同的模板而不是重定向,但我认为在url和网页之间进行1:1映射会更清晰。

另一种方法是修改设计。 编辑devise_gem_path / lib / devise / failure_app.rb并替换redirect_url方法中的两次出现:

 :"new_#{scope}_session_path" 

有:

 :"new_#{scope}_registration_path" 

破坏性较小的解决方案会使redirect_url的响应更具可配置性。