2016-03-07 20 views
0

這是我的devise路線是這樣的:如何覆蓋當用戶未通過身份驗證時Devise使用的login_path?

devise_for :users, :path_names => { :sign_up => "register", 
             :sign_in => "login", 
             :sign_out => "logout", 
              :settings => "settings" }, 
        :controllers => { :invitations => 'users/invitations', 
             :registrations => "registrations" } 
    devise_scope :user do 
    get "login", to: "devise/sessions#new" 
    get "register", to: "devise/registrations#new" 
     get "settings", to: "devise/registrations#edit" 
    delete "logout", to: "devise/sessions#destroy" 
    post "users/invitation/sign_in", to: "users/invitations#invite_sign_in" 
    get "confirmations/show" 

    authenticated :user do 
     root to: 'dashboard#index', as: :authenticated_root 
    end 

    unauthenticated do 
     root to: 'devise/sessions#new', as: :unauthenticated_root 
    end 
    end 

當我做rake routes,我看到:

login_path GET /login(.:format) devise/sessions#new 
register_path GET /register(.:format) devise/registrations#new 
settings_path GET /settings(.:format) devise/registrations#edit 

這是我期望的那樣。

但是,一旦我添加此我控制器:

before_filter :authenticate_user! 

我得到一個重定向循環當非授權用戶試圖訪問該資源。

這裏是日誌:

5:48:59 web.1    | Started GET "https://stackoverflow.com/users/login" for 127.0.0.1 at 2016-03-07 15:48:59 -0500 
15:48:59 web.1    | Processing by UsersController#show as HTML 
15:48:59 web.1    | Parameters: {"id"=>"login"} 
15:48:59 web.1    | Completed 401 Unauthorized in 8ms (ActiveRecord: 0.0ms) 
15:48:59 web.1    | 
15:48:59 web.1    | 
15:48:59 web.1    | Started GET "https://stackoverflow.com/users/login" for 127.0.0.1 at 2016-03-07 15:48:59 -0500 
15:48:59 web.1    | Processing by UsersController#show as HTML 
15:48:59 web.1    | Parameters: {"id"=>"login"} 
15:48:59 web.1    | Completed 401 Unauthorized in 2ms (ActiveRecord: 0.0ms) 

而不是把它重定向到/users/login,我怎麼讓它重定向到/login

不太確定如何覆蓋此特定功能。沒有在任何Devise文檔中看到它。

謝謝。

+0

你碰巧在'devise'路線上有'resources:users'嗎?可能是他們正在干涉設計路線。也可以嘗試「get/login」,將:「devise/sessions#new」而不是'get「login」設置爲:「devise/sessions#new」,看看它是否有效。 – Dharam

+0

@Dharam我實際上''資源:用戶'上面那'設計'路線。我應該將它移動到下面嗎?剛試過'/ login /',但沒有解決它。 – marcamillion

+0

@Dharam你是對的。一旦我將'resource:users'移到'devise'路徑下面,它就可以工作。非常感謝。將其添加爲答案,我將接受它。再次感謝! – marcamillion

回答

1

您是否碰巧在設計路線上有resources :users?可能是他們正在干涉設計路線。

也嘗試獲得"/login", to: "devise/sessions#new"而不是get "login", to: "devise/sessions#new",看看它是否工作。

+0

移動'資源:用戶'爲我工作。謝謝! – marcamillion

0

如果我理解正確的話......你可以寫一個自定義的before_filter:

def user_is_authenticated? 
    unless current_user.present? 
    # whatever else you want to do 
    redirect_to login_path 
    end 
end 

LMK如果這不是你的意思。

相關問題