2011-04-28 17 views
13

deviseを使用して、自分のサインアップを私の着陸/ウェルカムページにするにはどうすればいいですか?サインアップ後、サイト内のプロフィール/ ?Devise:ようこそ/訪問ページとしてのページへのユーザ登録

Facebookをウェブサイトの2つの側面のようにする方法を見つけようとしています。サインアップやサインインの後にのみ、ユーザーのための外部(サインアップ、about、連絡先など)とInside(プロフィール、ログアウトなど)。

ありがとう。

P.S.私はRuby on Railsとアプリケーションの作成は初めてですが、Rails 3チュートリアルで認証システムをやりました.Deviseを使い始めるにはほとんどのことを理解しています。

私は2つのアプリケーションレイアウトを使用しました.1つはサインアップする前に、PagesController(about、termsなど)を使用したlayouts/welcome.html.erbと、レイアウト/ application.htmlとなるサインインしたユーザー用のものですApplicationController(プロファイル、ニュース、追加など)を持つ.erbは、これが最善の手順ですか?

答えて

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やページ間の1のマッピングを。

3

認証済みのランディングページに簡単にアクセスでき、before_filterを使用してbefore_filterを使用してユーザーに最初にサインイン/サインアップすることができます。

この場合、「サインインした領域」は、profile/indexというコントローラ/アクションです。

routes.rbで、rootをprofile/indexに設定します。

root :to => 'profile#index' 

次に、profile_controllerで、次のbefore_filterを設定します。

before_filter :authenticate_user! 

これは自動的に、ログインしたユーザー(または以前ログインしたものとRemember Me Cookieを設定したもの)をプロファイルページに直接プッシュします。認証されていないユーザーは自動的にサインインになります。そのページにリンク(または別のタブ)をサインアップすることもできます。あなたのroutes.rbを内

+0

どうすれば認証されていないユーザーがサインアップしてしまうのですか? – LearningRoR

+0

その場合、上記のJasdeep Singhが提供する回答に従う必要があります。彼のソリューションは私のものよりも適応性があります。 –

9

歓迎はコントローラであり、インデックスはアクションです
root :to => 'welcome#index' 

。アプリケーションコントローラで

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

それはいいアイデアですが、それは私のために働いていません:( –

+0

あなたが扱っている問題は何ですか? –

+0

あなたが気にしない場合 –

2

別のアプローチは、工夫を変更することです。編集devise_gem_path/libに/工夫/ failure_app.rbとのREDIRECT_URL方法で2回出現を置き換えますと

:"new_#{scope}_session_path" 

:"new_#{scope}_registration_path" 

少ない破壊的な解決策はREDIRECT_URLの応答が複数の構成になるだろう。

+0

本当に必要な場合を除いて、宝石を修正するのは良い考えですか?私はレールを初めて使うので、正直な質問です。仲間のプログラマーになぜ習慣があるのか​​を説明する考え – Ricky

+0

このような宝石を改造するのは絶対に*間違っています。必要ならば、ただmonkeypatchすることができます。 – RyanScottLewis