2011-11-03 155 views
4

起初我是用基本的HTTP驗證與設計一個驗證用戶遵循本指南:的Rails 3 - 基本的HTTP認證VS認證令牌與iPhone

http://jessehowarth.com/2011/04/27/ajax-login-with-devise

我是能夠成功地驗證用戶的身份,但會議永遠保持登錄狀態。沒有辦法破壞用戶的會話。實際上,當我添加user_signed_in?在我的create方法中設計的方法,即使通過json註銷,它也會始終返回true。所以我得出結論:使用基本的http認證無法結束會話。你真正可以做的是檢查用戶是否已經登錄並將狀態碼作爲json發送回客戶端。

然後我嘗試了身份驗證令牌路由,該路由允許您使用身份驗證令牌創建會話,然後通過刪除該身份驗證令牌來銷燬會話,並且用戶必須再次登錄才能訪問需要進行身份驗證,如在這個崗位:

Devise and Authentication with CURL !

這種方法的缺點是,你有這樣的,你必須爲每個頁面需要身份驗證,這似乎有點不合需要的進入很長的字符串。我希望在這裏有兩全其美的好地方,你可以像在網絡瀏覽器中那樣登錄和登出。

林不知道,如果一切我要說的是準確的,但似乎符合這個職位:

http authentication in devise and rails 3

在這一崗位上,他說,認證令牌是「從1995年起HTTP基本身份驗證更安全密鑰可以過期「。我認爲他的意思是說,一旦您使用基本身份驗證進行登錄,就是這樣,您永遠登錄,而身份驗證令牌可以使其過期並強制用戶再次登錄。這是準確的解釋嗎?

感謝響應

+0

我注意到您將HTTP方法設置爲POST並設置X-HTTP-Method-Override標頭,而不是將HTTP方法設置爲DELETE。您是否試過 'curl -H'Content-Type:application/json'\ -H'Accept:application/json' -X DELETE \ http:// localhost:3000/users/sign_out \ -d' {「remote」:「true」,「commit」:「退出」,「utf8」:「✓」,「用戶」:{「remember_me」:「1」,「password」:「password」 :「[email protected]」}}'\ -c cookie'? –

+0

我重新格式化了問題,所以現在只是一個是或否的問題。儘管仍然沒有迴應。 – JohnMerlino

回答

0

是HTTP認證工作,一旦瀏覽器中(即在發送WWW-Authenticate頭)記錄的方式,將保持登錄狀態直到其HTTP認證緩存過期(通常當您退出瀏覽器)。

因爲瀏覽器繼續發送的HTTP認證有效證書(沒有「HTTP註銷」),這就是爲什麼你看到用戶仍然登錄。

我的建議是使用設計的authentication_token功能並將?auth_token傳遞給您的API。請記住,即使它是POST/DELETE/PUT/etc,也必須將它們作爲URL的一部分傳遞。 (這是一個可能現在已經修復的設計錯誤)。