首页 文章

Django rest ember simple auth验证者“authenticator:oauth2”被拒绝恢复会话 - 无效

提问于
浏览
0

我使用django rest框架和令牌auth作为后端身份验证 . 在提交用户凭据时,来自后端令牌的格式为此格式

{token:“cKCxxxxxxxxxxxxxxxxxxxxx”}

在前端ember-simple auth我尝试登录时使用oauth2作为验证器说:

验证者“authenticator:oauth2”被拒绝恢复会话 - 无效...

并且会话未保存它已登录但当路由更改时它已注销 . 如何在 Headers 中附加标记?当使用ember-simple-auth时,它必须自动附加或我得到错误???

login.js

actions: {
  authenticate(username, password) {
    var controller = this.controller;         
    this.get('session').authenticate('authenticator:oauth2', username, password).catch((reason) => {
      controller.set('errorMessage', reason.detail || reason);
      console.log(this.get('session.data.authenticated'));
    });
  } 
}

和验证者:

import OAuth2PasswordGrant from 'ember-simple-auth/authenticators/oauth2-password-grant';

export default OAuth2PasswordGrant.extend({
  serverTokenEndpoint: 'http://127.0.0.1:8000/api/auth/login/',
});

授权者:从'ember-simple-auth / authorizers / oauth2-bearer'导入OAuth2Bearer;

export default OAuth2Bearer.extend({
});

适配器:

import DS from 'ember-data';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';

export default DS.RESTAdapter.extend(DataAdapterMixin, {
  host: 'http://127.0.0.1:8000',
  namespace: 'api',
  authorizer: 'authorizer:oauth2',
});

1 回答

  • 0

    TLDR :Ember Social API在DRF发出 token 时查找 access_token

    服务器端修复

    您需要子类化TokenSerializer并覆盖 keyword = Bearer

    客户端修复

    OAuth2Bearer需要一个名为 access_token 的标记值,如果该值存在,它将添加带有 Bearer 前缀的Authorization标头 . 但是,DRF令牌期望Authorization标头以 Token 为前缀,请参阅下面的代码以更好地展示

    DRF TOKEN的工作授权人

    import Ember from 'ember';
    import Base from 'ember-simple-auth/authorizers/base';
    
    const { isEmpty } = Ember;
    
    export default Base.extend({
    authorize(data, block) {
        const accessToken = data['token'];
    
        if (!isEmpty(accessToken)) {
          block('Authorization', `Token ${accessToken}`);
        }
      }
    });
    

    参考orignal OAuth2Bearer

    Ember Social Auth - OAuth2Bearer

相关问题