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

Lea*_*RoR 13 ruby-on-rails devise ruby-on-rails-3

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

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

谢谢.

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

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

Jas*_*ngh 9

在您的routes.rb中:

root :to => 'welcome#index'
Run Code Online (Sandbox Code Playgroud)

控制器和索引是受欢迎的操作.

在您的应用程序控制器

def after_sign_in_path_for(user)
   "/url_you_want_to_redirect_to/"
end
Run Code Online (Sandbox Code Playgroud)


Lea*_*RoR 6

这是我使用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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

user_pages_controller.rb

class UserPagesController < ApplicationController
  before_filter :authenticate_user!

  def home
  end

  def profile
  end
end
Run Code Online (Sandbox Code Playgroud)