gpt4 book ai didi

ember.js - 使用 Oauth2 token 恢复没有电子邮件和密码的 session

转载 作者:行者123 更新时间:2023-12-01 06:28:38 24 4
gpt4 key购买 nike

我有一种情况,我希望能够根据 URL 中的确认 token 参数自动登录用户。在我的 route ,我向服务器发出 AJAX 请求以验证 token 并发送回用于登录的相同序列化 Oauth2 JSON。

是否可以使用此 token 登录用户?

首先,用户转到如下 URL:

http://example.com/users/confirmation?confirmation_token=eisz6LMzmck55xHuqopF

接下来,我的路由向服务器发送一个 AJAX 请求,该服务器使用 Oauth2 token 进行回复。

这是我当前尝试使用身份验证器来恢复它的实现。尽管在控制台中看到“我应该登录”,但它不起作用。我怀疑这是因为它不知道恢复 session 。看着 session documentatio n,我看到了一种手动身份验证的公共(public)方法,但没有从 oauth token 恢复的方法。
import Ember from 'ember';
import ajax from 'ic-ajax';

export default Ember.Route.extend({
model: function(params) {
var path = MyApp.API_NAMESPACE + '/confirmation?confirmation_token=' + params.confirmation_token;
var authenticator = this.container.lookup('simple-auth-authenticator:oauth2-password-grant');

return ajax(path).then(function(response) {
return authenticator.restore(response).then(function() {
console.log('I should be logged in');
});
}).catch(function(request) {
console.log(request);
});
}
});

最佳答案

我通过创建一个基本上继承自 oauth2 验证器的自定义验证器解决了这个问题,只覆盖了 authenticate方法。

首先,我在 app/lib/confirmation-authenticator.js 中创建了我的身份验证器。 :

import OAuth2Authenticator from 'simple-auth-oauth2/authenticators/oauth2';
import ajax from 'ic-ajax';

export default OAuth2Authenticator.extend({
authenticate: function(token) {
var path = MyApp.API_NAMESPACE + '/confirmation?confirmation_token=' + token;

return new Ember.RSVP.Promise(function(resolve, reject) {
ajax(path).then(function(response) {
resolve(response);
}).catch(function(request) {
reject(request.textStatus);
});
});
}
});

然后在我的初始化程序中注册身份验证器 app/initializers/authentication :
import ConfirmationAuthenticator from 'my-app/lib/confirmation-authenticator';

export default {
name: 'authentication',
before: 'simple-auth',

initialize: function(container) {
container.register('simple-auth-authenticator:confirmation', ConfirmationAuthenticator);

window.ENV = window.ENV || {};

window.ENV['simple-auth'] = {
authorizer: 'simple-auth-authorizer:oauth2-bearer',
};

window.ENV['simple-auth-oauth2'] = {
serverTokenEndpoint: MyApp.API_NAMESPACE + '/oauth/token'
};
}
};

最后是我的路线 app/routes/users/confirmation.js :
import Ember from 'ember';

export default Ember.Route.extend({
model: function(params) {
var token = params.confirmation_token;

return this.get('session').authenticate('simple-auth-authenticator:confirmation', token);
}
});

关于ember.js - 使用 Oauth2 token 恢复没有电子邮件和密码的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com