首页 文章

在使用Torii进行身份验证后,Ember Simple Auth会立即使会话无效

提问于
浏览
3

我正在尝试使用我自己的OAuth流和Ember-Simple-Auth设置Torii . 我可以获得成功的身份验证事件,但在我进行身份验证后立即触发 invalidateSession 触发器,导致我的会话结束 . 我可以通过拦截 /app/routes/application.js (其中包含 ApplicationRouteMixin )的 sessionInvalidated() 来看到这一点 .

有没有人遇到过这个?有什么特殊的东西会导致立即会话验证吗?任何建议将不胜感激 .

编辑:我认为它与torii弹出代码有关,因为第一次返回工作,但第二次没有 . 有什么想法吗?

import OAuth2 from 'torii/providers/oauth2-code';
import {configurable} from 'torii/configuration';

export default OAuth2.extend({
  name: 'api',
  init() { this.set('clientID', this.get('apiKey')); },

  baseUrl: configurable('baseUrl'),

  redirectUri: configurable('redirectUri'),
  responseParams: ['access_token', 'user_id', 'first_name'],

  requiredUrlParams: ['client_id', 'redirect_uri', 'response_type'],

  open() {
    let name        = this.get('name');
    let url         = this.buildUrl();
    let redirectUri = this.get('redirectUri');
    let responseParams = this.get('responseParams');

    // this return works
    return { 'yes' : 'no' }

    // this return causes the immediate invalidation
    return this.get('popup').open(url, responseParams).then((authData) => {
      var missingResponseParams = [];

      responseParams.forEach(function(param){
        if (authData[param] === undefined) {
          missingResponseParams.push(param);
        }
      });

      if (missingResponseParams.length){
        throw new Error("The response from the provider is missing " +
              "these required response params: " + missingResponseParams.join(', '));
      }

      return {
        access_token: authData.access_token,
        first_name: authData.first_name,
        user_id: authData.user_id,
        provider: name,
        redirectUri: redirectUri
      };
    });
  }
});

2 回答

  • 2

    真正的答案是使用这个分支:https://github.com/simplabs/ember-simple-auth/pull/931(希望它很快就会成为主人) .

  • 3

    你可能在某处有 this.get('session').invalidate(); . 可能在您的一个控制器动作属性中 . 您通常会将其放入您的注销按钮的操作中 . 也许你偶然复制并粘贴它 . 如果你发布一些代码,我可能会再看一些

相关问题