2016-01-30 63 views
3

我花了太長的時間試圖弄清楚這一點,谷歌已經沒有什麼幫助。我在客戶端上使用dev-token-auth gem和ng-token-auth進行令牌身份驗證,登錄後它不斷給我一個陳舊的令牌。特別是,即使新的令牌被返回並存儲在cookie中,用戶使用的最後一個令牌也是如此。爲了讓事情變得更加迷惑,如果我刷新頁面,我突然得到正確的令牌並且認證按預期工作。這一切都在上週工作很好,所以我有點在我自己身上發生了什麼改變,可能導致這種情況發生。有沒有人之前或現在看到這是什麼造成的。這讓我瘋狂。設計令牌認證給予陳舊的令牌

初始化/ devise_token_auth.rb

DeviseTokenAuth.setup do |config| 
    config.change_headers_on_each_request = false 
    config.default_confirm_success_url = "confirmed" 
    remove_tokens_after_password_reset = true 
    config.token_lifespan = 24.hours 
end 

的routes.rb

mount_devise_token_auth_for 'User', at: 'api/auth' 

我真的不知道是怎麼回事或爲什麼它折磨着我這個樣子。任何幫助是極大的讚賞。如果有任何我沒有提到的代碼可以幫助回答這個問題,請告訴我。

+0

服務器日誌是否顯示新的令牌被髮送回角?它不是正確地存儲新的令牌嗎?日誌會幫助我們。 – Anthony

+0

除了發回令牌之外,服務器日誌並沒有真正給出多少指示。 validateuser響應顯示從服務器發送無效令牌,然後刷新包含正確標記的標頭。 –

+0

您在初始化程序中缺少配置:'config.remove_tokens_after_password_reset = true' – Anand

回答

1

我不確定這是否是解決此問題的最佳方法,但我設法通過注入ipCookies來修復它,並在請求配置標頭爲空時檢查以使用該方法。登錄後,配置將爲空,但cookie會存在。所以爲了防止任何問題,我也檢查cookie是否存在,如果存在,那麼我使用這些。我不確定我喜歡這個解決方案,但它可以工作。

var injector = angular.injector(['ipCookie']); 
var cookies = injector.get('ipCookie'); 
var auth_headers = cookies('auth_headers'); 

if ((config.headers['access-token'] || auth_headers['access-token']) && !$httpProvider.defaults.headers.common['access-token']) { 
    $httpProvider.defaults.headers.common['Access-Token'] = config.headers['access-token'] || auth_headers['access-token']; 
    $httpProvider.defaults.headers.common['Token-Type'] = config.headers['token-type'] || auth_headers['token-type']; 
    $httpProvider.defaults.headers.common['Client'] = config.headers['client'] || auth_headers['client']; 
    $httpProvider.defaults.headers.common['Expiry'] = config.headers['expiry'] || auth_headers['expiry']; 
    $httpProvider.defaults.headers.common['Uid'] = config.headers['uid'] || auth_headers['uid']; 
}