如何使用Ember Torii和Ember Simple Auth对Twitter进行身份验证

时间:2018-11-26 23:17:31

标签: ember.js ember-simple-auth torii

我正在尝试使用Ember Torii和Ember Simple Auth针对Twitter进行身份验证。但是,我不确定用户通过身份验证后如何正确关闭身份验证弹出窗口。我的代码:

caldav.icloud.com

据我了解,使用Twitter进行身份验证时会发生以下情况:

  1. 用户单击UI元素以启动身份验证流程。灰烬鸟居会创建一个弹出窗口,并向//app/authenticators/torii.js import {inject as service} from '@ember/service'; import Torii from 'ember-simple-auth/authenticators/torii'; export default Torii.extend({ torii: service(), ajax: service(), authenticate() { const ajax = this.get('ajax'); return this._super(...arguments).then((data) => { console.log('Authorization data:'); console.log(data); if(data.provider === "twitter" && data.code) { return { accessToken: data.code, provider: data.provider }; } //This is for OAuth2 providers e.g. Facebook return ajax.request( 'http://localhost:8080/api/1/auth', { type: 'POST', dataType: 'json', crossDomain: true, contentType: 'application/json', data: {'provider': data.provider, 'authorizationCode': data.authorizationCode} }).then((response) => { return { accessToken: response.token, provider: data.provider }; }); }); } }); //config/environment.js ....... providers: { 'facebook-oauth2': { apiKey: 'xxxxxxxxxxxxxx', scope: 'public_profile,email' }, 'twitter': { requestTokenUri: 'http://localhost:8080/api/1/auth/twitter/' }, //app/torii-providers/facebook-oauth2.js import { computed } from '@ember/object'; import FacebookOauth2Provider from 'torii/providers/facebook-oauth2'; export default FacebookOauth2Provider.extend({ redirectUri: computed(function() { return [ window.location.protocol, '//', window.location.host, '/torii/redirect.html' ].join(''); }), fetch(data) { return data; } }); 发出GET请求。 API后端会生成Twitter所需的requestTokenUri,并使用oauth_token作为查询参数重定向到Twitter登录页面。
  2. 用户登录。假设登录成功,Twitter然后将浏览器弹出窗口以及oauth_tokenCallback URL参数重定向到API后端上已配置的oauth_token
  3. 后端API oauth_verifier接收这些参数,并与存储在后端中的Callback URLoauth_token交换这些参数。

我的问题基本上是,接下来会发生什么以及如何干净安全地关闭弹出窗口并初始化会话:

我的后端将上面3中生成的令牌转换为内部JWT令牌,并将浏览器弹出窗口重定向到oauth_token_secret。但是,当浏览器弹出窗口关闭时,Torii尝试通过调用authenticate方法来重新认证给定令牌,这不是必需的。我已经在torii/redirect.html?code=<<JWTTOKEN>>中显示了一种变通方法。它是否正确?有更好的方法吗?

0 个答案:

没有答案
相关问题