2012-11-29 50 views
0

我正在使用devise開發用戶認證。登錄頁面類似於 localhost:3000/users/sign_in。登錄成功後(Post請求),用戶被重定向到主頁(localhost:3000 /)。這是預期的,我確實看到在瀏覽器中加載的主頁內容。登錄成功後重定向,但瀏覽器地址欄中仍顯示原始URL

然而,在瀏覽器地址欄仍顯示爲原始請求URL爲localhost:3000 /用戶/ sign_in

任何想法,爲什麼發生這種情況?它是設計配置的東西還是它的軌道服務器? 我沒有太多我自己的代碼,幾乎只是用我的用戶模型的默認設計選項。

這裏是我的路線的一部分:

new_user_session GET /users/sign_in(.:format) devise/sessions#new 
user_session  POST /users/sign_in(.:format) devise/sessions#create 
root    /      home#index 

謝謝!

+0

可以從您的ApplicationController發表您的'after_sign_in_path_for'方法 – Magicmarkker

+0

我的ApplicationController實際上是空的,所以我使用的色器件獨創的「after_sign_in_path_for」。所以默認的行爲是重定向到我的情況下是「/」的根。 – smilingcoder

+0

我有一個類似於你的應用程序,使用默認的after_sign_in_path_for,如果im沒有登錄,它會重定向到sign_in頁面,然後當我登錄時重定向到根url。你確定你的根網址與sign_in網址不一樣嗎?默認功能工作非常標準。 – Magicmarkker

回答

1

下面是最新色器件版本的代碼塊

文件:../gems/devise-2.1.2/app/controllers/devise/sessions_controller.rb

# POST /resource/sign_in 
def create 
    resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    respond_with resource, :location => after_sign_in_path_for(resource) 
end 

def after_sign_in_path_for(resource_or_scope) 
    stored_location_for(resource_or_scope) || signed_in_root_path(resource_or_scope) 
end 

def signed_in_root_path(resource_or_scope) 
    scope = Devise::Mapping.find_scope!(resource_or_scope) 
    home_path = "#{scope}_root_path" 
    if respond_to?(home_path, true) 
    send(home_path) 
    elsif respond_to?(:root_path) 
    root_path 
    else 
    "/" 
    end 
end 

如果根被配置爲家庭#指數爲例子,它是由before_filter :authenticate_user!然後輸入用戶名和密碼後保護網址必須是您的域名。

+0

其實,我的Home#索引甚至沒有這個before_filter:authenticate_user!然而。但是,在sign_in成功之後,主頁內容仍然被加載,但地址欄中的URL保持爲/ users/sign_in。同樣的事情也發生在sign_out上。 – smilingcoder

+0

你一定要補充說,否則你的登錄是無用的。 – Magicmarkker

+0

沒錯。但現在,這只是初期階段。我們需要弄清楚哪些頁面應該被保護,但目前還沒有主頁。這是一個不同的主題,但感謝提醒。 – smilingcoder

相關問題