2011-04-28 54 views
13

使用設計,我如何使我的註冊爲我的登陸/歡迎頁面,然後註冊後,他們進入到配置文件/簽名區域內的網站?設計:註冊頁面作爲歡迎/登陸頁面,然後到用戶配置文件

我想弄清楚如何使它像Facebook在哪裏他們是網站的兩面;外部(註冊,關於,聯繫等)和內部(配置文件,註銷等),只有在註冊或登錄後才能發佈。

謝謝。

P.S.我是Ruby on Rails和創建應用程序的新手,但我確實使用Rails 3 Tutorial進行了身份驗證系統,我瞭解大多數開始使用Devise的事情,我不知道從哪裏開始使用這種情況。

我打算使用2個應用程序佈局,其中1個是使用PagesController(about,terms等)的layouts/welcome.html.erb,另一個是layouts/application.html .erb與ApplicationController(配置文件,新聞,添加等),這是最好的步驟?

回答

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

在根頁面上檢查用戶是否已登錄,並基於該頁面進行重定向。

redirect_to sign_up_path if current_user.nil? 

或者,您可以呈現不同的模板,而不是重定向,但我認爲這是清潔劑具有1:URL和頁面之間的一對一映射。

3

我覺得最簡單的方法就是根據需要驗證的登錄頁面,然後使用before_filter強制用戶首先通過before_filter登錄/註冊。

在這種情況下,假設您的「登錄區域」是一個名爲profile/index的控制器/操作。

在您的routes.rb中,將根設置爲配置文件/索引。

root :to => 'profile#index' 

然後在你的profile_controller中設置下面的before_filter。

before_filter :authenticate_user! 

這會自動將登錄的用戶(或者是一個早期記錄並設置一個記住的cookie)直接到個人資料頁。任何未經身份驗證的用戶將在登錄時自動結束。您需要在該頁面上的鏈接(或單獨的選項卡)以註冊。

+0

我將如何更改它,以便未經身份驗證的用戶最終登錄註冊? – LearningRoR 2011-05-13 18:14:43

+0

在這種情況下,您需要按照上面的Jasdeep Singh提供的答案。他的解決方案比我的適應性更強。 – 2011-05-26 18:47:49

9

在你的routes.rb:

root :to => 'welcome#index' 

歡迎哪裏是控制器和指數的作用。

在應用程序控制器:

def after_sign_in_path_for(user) 
    "/url_you_want_to_redirect_to/" 
end 
+0

它是一個好主意,但它不適合我:( – 2013-01-18 18:54:29

+0

你正在處理什麼問題? – 2013-01-18 22:28:58

+0

如果你不介意共享 – 2013-01-18 22:29:24

2

另一種方法是修改色器件。編輯devise_gem_path/lib目錄/色器件/ failure_app.rb和的REDIRECT_URL方法代替兩個事件:

:"new_#{scope}_session_path" 

有:

:"new_#{scope}_registration_path" 

一個破壞性更小的解決方案將使REDIRECT_URL的反應更可配置。

+0

修改gems是否是一個好主意,除非絕對真正有必要?我是rails的新手,所以這是一個誠實的問題。想向同伴解釋爲什麼有自定義寶石漂浮在我的身邊令人感到恐懼 – Ricky 2012-01-26 07:37:56

+0

是否絕對錯誤地修改了這樣的寶石,如果需要的話,你可以修改寶石。 – RyanScottLewis 2013-08-07 11:23:02