2017-08-12 45 views
0

在使用Devise的rails應用程序中,當無簽名用戶訪問root時,他們被重定向到/ users/sign_in而不是根路徑;根路徑可以在登錄用戶身上正常工作。同樣的事情發生在我點擊navbar的標誌,這是一個與根目錄home_path的鏈接,我被重定向到/ users/sign_in就像訪問根目錄時一樣。這裏是我的路線:在使用Devise的rails應用程序中,當一個未簽名的用戶訪問root時,他們被重定向到/ users/sign_in而不是根路徑?

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

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

    root 'static_pages#home' 

說帶我到/用戶/ sign_in代替home_path/root_path在導航欄模板中的鏈接:

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

我在前端採用了棱角分明,所以這是什麼路徑看起來在用戶訪問根目錄時簽署的,如:

http://localhost:3000/home#/ 

如果,如果我手動更改URL到/ 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控制器:

class StaticPagesController < ApplicationController 
    def home 
    end 
end 
+0

你可以包括你的ApplicationController和/或StaticPagesController? – michaeldever

+1

是的,我只是更新了問題。 – srlrs20020

回答

0

在你的ApplicationController,StaticPagesController子類,設置before_action :authenticate_user!其中,這將觸發所有的行動,試圖驗證用戶。

這意味着,當用戶未登錄時,身份驗證檢查將失敗,並且您將被重定向到用戶登錄路由。

1

這是因爲幫手authenticate_user!只允許登錄用戶訪問網頁。您需要添加skip_before_action :authenticate_user!statics_controller爲了讓非的loggedIn用戶訪問home頁面

class StaticPagesController < ApplicationController 
    skip_before_action :authenticate_user! 

    def home 
    end 
end 
相關問題