使用设计,我如何使我的注册作为我的登陆/欢迎页面,然后在注册后,他们进入网站的个人资料/登录区域?
我想弄清楚如何使它像Facebook一样,他们是网站的两面;只有在用户注册或登录后,才能看到外部(注册,关于,联系方式等)和内部(个人资料,注销等)。
谢谢。
注:我是Ruby on Rails和创建应用程序的新手,但我确实用Rails 3教程做了身份验证系统,我了解大多数开始使用设计的事情,我只是不知道从哪里开始。
我打算使用两个应用程序布局,一个是在注册之前,也就是layouts/welcome.html。erb与PagesController (about,terms等),另一个用于登录用户,这将是layouts/application.html。erb与ApplicationController(配置文件,新闻,添加等),这是最好的步骤吗?
在routes.rb:
root :to => 'welcome#index'
welcome是控制器,index是动作
在你的应用程序控制器中:
def after_sign_in_path_for(user)
"/url_you_want_to_redirect_to/"
end
这是我使用Rails 3.1.0
和design 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
我发现最容易root到所需的认证登录页面,只需使用before_filter强制用户首先通过before_filter登录/注册。
在本例中,假设你的"signed In area"是一个名为profile/index的控制器/动作。
在你的路线。
root :to => 'profile#index'
然后在你的profile_controller中设置如下的before_filter。
before_filter :authenticate_user!
这将自动将登录用户(或较早登录并设置记住我cookie的用户)直接推送到个人资料页面。任何未经身份验证的用户将自动登录。你会想要一个链接(或单独的选项卡)在该页面上注册以及
在根页面检查用户是否已登录,并基于此重定向。
redirect_to sign_up_path if current_user.nil?
或者,您可以呈现不同的模板而不是重定向,但我认为url和页面之间的1:1映射更干净。
另一种方法是修改设计。编辑devise_gem_path/lib/设计/failure_app。并替换redirect_url方法中出现的两个
:"new_#{scope}_session_path"
:
:"new_#{scope}_registration_path"