Ember Simple Auth 在使用 Torii 进行身份验证后立即使会话无效
Ember Simple Auth immediately invalidates the session after authenticating with Torii
我正在尝试使用我自己的 OAuth 流程和 Ember-Simple-Auth 设置 Torii。我可以获得成功的身份验证事件,但在我进行身份验证后,立即触发 invalidateSession
触发器,导致我的会话结束。我可以通过在 /app/routes/application.js
(具有 ApplicationRouteMixin
)中拦截 sessionInvalidated()
来看到这一点。
大家遇到过这种情况吗?是否有什么特殊的东西会导致立即进行会话验证?任何建议将不胜感激。
编辑:我认为这与 torii 弹出代码有关,因为第一个 return 有效,但第二个无效。有什么想法吗?
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
};
});
}
});
您可能在某个地方有 this.get('session').invalidate();
。可能在您的控制器操作属性之一中。您通常会将其放入注销按钮的操作中。也许您不小心复制并粘贴了它。如果你 post 一些代码,我也许可以再看一下
真正的答案是使用这个分支:https://github.com/simplabs/ember-simple-auth/pull/931(希望它很快就会在 master 中)。
我正在尝试使用我自己的 OAuth 流程和 Ember-Simple-Auth 设置 Torii。我可以获得成功的身份验证事件,但在我进行身份验证后,立即触发 invalidateSession
触发器,导致我的会话结束。我可以通过在 /app/routes/application.js
(具有 ApplicationRouteMixin
)中拦截 sessionInvalidated()
来看到这一点。
大家遇到过这种情况吗?是否有什么特殊的东西会导致立即进行会话验证?任何建议将不胜感激。
编辑:我认为这与 torii 弹出代码有关,因为第一个 return 有效,但第二个无效。有什么想法吗?
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
};
});
}
});
您可能在某个地方有 this.get('session').invalidate();
。可能在您的控制器操作属性之一中。您通常会将其放入注销按钮的操作中。也许您不小心复制并粘贴了它。如果你 post 一些代码,我也许可以再看一下
真正的答案是使用这个分支:https://github.com/simplabs/ember-simple-auth/pull/931(希望它很快就会在 master 中)。