devise_token_auth - 响应头中没有访问令牌

时间:2016-02-11 00:03:58

标签: ruby-on-rails rspec

我在我的rails应用程序中使用devise_token_auth,Ver 0.1.37。我正在使用rspec来测试我的应用程序。

登录到应用程序成功,并在响应标头中返回访问令牌。在后续请求中,不会收到新的访问令牌。请求成功,HTTP状态为201。

1 个答案:

答案 0 :(得分:1)

我有一段时间用这个问题撞墙,并在我的React Native项目中通过以下方式解决了这个问题:

  • 确保我将rails应用程序中的标题列入白名单(在Rack CORS配置文件中)

    config.middleware.insert_before 'Rack::Runtime', 'Rack::Cors' do allow do origins '*' resource '*', headers: :any, expose: ['access-token', 'expiry', 'token-type', 'uid', 'client'], methods: [:get, :put, :post, :patch, :delete, :options] end end

  • 保存(使用AsynStorage)登录后我回来的auth标头

    if (resp.ok) { if (resp.headers.get('access-token')) { let accessToken = resp.headers.get('access-token'); let client = resp.headers.get('client'); let expiry = resp.headers.get('expiry'); let tokenType = resp.headers.get('token-type'); let uid = resp.headers.get('uid'); let authHeader = {'client': client, expiry: expiry, uid: uid, 'access-token': accessToken, 'token-type': tokenType}; AsyncStorage.setItem('auth_header', JSON.stringify(authHeader)); } return json; }

  • 为每个后续请求使用已保存的标头

    export function fetchTheThing() { return (dispatch, getState) => { return AsyncStorage.getItem('auth_header', (err, result) => { return Api.get( / {the_thing {1}}

我也遇到了每个请求重置令牌的默认设置的问题,因此我在devise_token_auth.rb中将其设置为false。

(对不起这些代码块的格式化)