【问题标题】:Django rest + ember simple auth The authenticator “authenticator:oauth2” rejected to restore the session - invalidatingDjango rest + ember simple auth 验证器“authenticator:oauth2”拒绝恢复会话 - 无效
【发布时间】:2016-11-15 13:47:56
【问题描述】:

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

{token: "cKCxxxxxxxxxxxxxxxxxxxxx"}

在前端 ember-simple auth 上,当我尝试登录时,我使用 oauth2 作为身份验证器:

身份验证器“authenticator:oauth2”拒绝恢复会话 - 正在失效……

并且会话未保存它已登录,但是当路由更改时它已注销。如何在标头中附加令牌?正确使用 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',
});

【问题讨论】:

    标签: django authentication ember.js django-rest-framework ember-simple-auth


    【解决方案1】:

    TLDR:Ember Social API 查找 access_token,而 DRF 发送 token

    服务器端修复

    您需要继承 TokenSerializer 并覆盖 keyword = Bearer

    客户端修复

    OAuth2Bearer 需要一个名为 access_token 的令牌值,如果该值存在,它将添加带有 Bearer 前缀的 Authorization 标头。 但是 DRF Token 要求 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}`);
        }
      }
    });
    

    对原始 OAuth2Bearer 的引用

    Ember Social Auth - OAuth2Bearer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多