2017-08-12 8 views
0

Deviseを使用している私のレールアプリでは、署名されていないユーザーがルートを訪問すると、ルートパスの代わりに/ users/sign_inにリダイレクトされます。 rootのパスは、ログインしたユーザーとうまく動作します。 rootであるhome_pathとのリンクであるnavbarロゴをクリックすると同じことが起こります。ルートにアクセスしたときと同じように/ users/sign_inにリダイレクトされます。ここに私のルートです:Deviseを使用している私のレールアプリでは、未訪問のユーザーがルートを訪れると、ルートパスの代わりに/ users/sign_inにリダイレクトされますか?

get 'home' => 'static_pages#home', as: "home" 

    devise_for :users, :controllers => { registrations: 'registrations' } 

    root 'static_pages#home' 

代わりに、ナビゲーションバーテンプレートのhome_path /のroot_pathの/ユーザー/ sign_inに私を取るのリンク:

<a class="navbar-brand" href="<%= home_path %>">Brand</a> 

私は、フロントエンドに角度を使用していますので、これは何ですかユーザーの訪問ルートに署名したとき、パスは次のようになります。私は手動でホーム/ホーム#/または/へのURLを変更した場合場合

http://localhost:3000/home#/ 

私はまだユーザー/ sign_inにリダイレクトしています。

他の情報を含めることはできません。これは私が上書きする必要があるDeviseのデフォルト動作ですか?ドキュメントの自動リダイレクトで何かを見つけることができないようです。助けてくれてありがとう。

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

class ApplicationController < ActionController::Base 
    before_action :authenticate_user! 
    protect_from_forgery with: :exception 


    def after_sign_in_path_for(user) 
    home_path 
    end 
end 

static_pagesコントローラ:あなたのApplicationControllerには

class StaticPagesController < ApplicationController 
    def home 
    end 
end 
+0

はあなたのApplicationControllerにおよび/またはStaticPagesControllerを含めることができ非LOGGEDINユーザーがhomeページにアクセスしてみましょうするためにstatics_controllerskip_before_action :authenticate_user!を追加する必要がありますか? – michaeldever

+1

はい質問を更新しました。 – srlrs20020

答えて

0

、StaticPagesControllerサブクラス、あなたがbefore_action :authenticate_user!を設定し、ユーザーを認証しようとしている、すべてのアクションのためにトリガされます。

これは、ユーザーがサインインしていない場合、認証チェックが失敗し、ユーザーサインインルートにリダイレクトされることを意味します。

1

ヘルパーauthenticate_user!は、サインインしたユーザーのみがWebページにアクセスできるためです。あなたは

class StaticPagesController < ApplicationController 
    skip_before_action :authenticate_user! 

    def home 
    end 
end 
関連する問題