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

时间:2011-04-28 21:16:31

标签: ruby-on-rails ruby-on-rails-3 devise

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

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

谢谢。

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

我打算使用2个应用程序布局,1个在注册之前是layouts / welcome.html.erb和PagesController(about,terms等),另一个用于登录用户,这将是layouts / application.html。使用ApplicationController(配置文件,新闻,添加等),这是最好的步骤吗?

5 个答案:

答案 0 :(得分:9)

你的routes.rb中的

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的响应更具可配置性。