Devise身份驗證gem的經典應用程序結構是僅服務器端Rails應用程序。在這種情況下,當沒有任何東西阻止會話銷燬時。當併發請求未完成時無法註銷Devise用戶
但是我使用的是Rails + Devise + Angular.js,並嘗試以正確的方式註銷 - 這意味着 - /users/sign_out
URL必須由Angular應用程序調用,而不是通過點擊<a href="https://stackoverflow.com/users/sign_out">
鏈接。
我的應用程序以塊填充數據。如果在/ users/sign_out URL被調用時某些數據請求尚未完成,Devise會重新登錄該用戶。
我做了我的自定義註銷的方法來看看會發生什麼:
before_filter :authenticate_user!
def data_request
.............
end
def logout
sign_out(current_user)
if current_user
puts 'Has not signed out!'
else
puts 'Has signed out!'
end
redirect_to '/users/sign_out'
end
後sign_out
方法調用current_user
真的nil
,但隨後data_request第二天請求通過before_filter
,如果我還沒有登陸出。
如果您能幫助我瞭解發生的情況以及如何實施可靠的註銷,我將不勝感激。
更新
我曾經遇到過一個奇怪的現象:
如果我停止WEBrick服務器,再次啓動它,並重新加載頁面,應用程序允許我這樣稱呼API方法,如會話不銷燬。據我所知,Devise的身份驗證Cookie不包含加密/編碼的登錄名和密碼,但代表臨時會話ID,只有在特定會話處於活動狀態且會話銷燬應無效時才應該有效。
註銷方法當前設置爲GET,但它沒有任何區別。我試過DELETE,GET,POST - 行爲總是一樣的。 – Paul