使用设计,如何将我的注册作为我的登陆/欢迎页面,然后在注册后,他们进入网站内的个人资料/登录区域?
我正在试图弄清楚如何让它像Facebook一样,是网站的两面;注册或登录后,仅限用户使用外部(注册,关于,联系等)和内部(个人资料,注销等)。
谢谢。
P.S。我是Ruby on Rails的新手并创建应用程序,但我确实使用Rails 3 Tutorial进行身份验证系统,我了解大多数事情开始使用Devise,我不知道从这种情况开始。
我打算使用2个应用程序布局,1个在注册之前是layouts / welcome.html.erb和PagesController(about,terms等),另一个用于登录用户,这将是layouts / application.html。使用ApplicationController(配置文件,新闻,添加等),这是最好的步骤吗?
答案 0 :(得分:9)
:
root :to => 'welcome#index'
欢迎是控制器,索引是行动。
在您的应用程序控制器中:
def after_sign_in_path_for(user)
"/url_you_want_to_redirect_to/"
end
答案 1 :(得分:6)
这是我使用Rails 3.1.0
和设计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
答案 2 :(得分:3)
我发现最简单的方法是根据所需的经过身份验证的着陆页,只需使用before_filter强制用户首先通过before_filter登录/注册。
在这种情况下,假设你的“登录区域”是一个名为profile / index的控制器/动作。
在routes.rb中,将root设置为profile / index。
root :to => 'profile#index'
然后在您的profile_controller中,设置以下before_filter。
before_filter :authenticate_user!
这将自动将已登录的用户(或之前登录的用户并将“记住我”Cookie设置)直接推送到个人资料页面。任何未经身份验证的用户都将自动以登录方式结束。您还希望该页面上的链接(或单独的标签页)也可以注册。
答案 3 :(得分:2)
在根页面上检查用户是否已登录,并根据该用户重定向。
redirect_to sign_up_path if current_user.nil?
或者,您可以渲染不同的模板而不是重定向,但我认为在网址和网页之间建立1:1的映射更为清晰。
答案 4 :(得分:2)
另一种方法是修改设计。编辑devise_gem_path / lib / devise / failure_app.rb并替换redirect_url方法中的两个匹配项:
:"new_#{scope}_session_path"
使用:
:"new_#{scope}_registration_path"
破坏性较小的解决方案会使redirect_url的响应更具可配置性。