Как пройти аутентификацию на Twitter с помощью Ember Torii и Ember Simple Auth
Я пытаюсь пройти аутентификацию на Twitter, используя Ember Torii и Ember Simple Auth. Однако я не уверен, как правильно закрыть всплывающее окно аутентификации после того, как пользователь прошел аутентификацию. Мой код:
//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;
}
});
Насколько я понимаю, в случае аутентификации с помощью Twitter происходит следующее:
- Пользователь нажимает на элемент пользовательского интерфейса, чтобы инициировать поток аутентификации. Ember Torii создает всплывающее окно и выполняет запрос GET
requestTokenUri
, API-интерфейс генерируетoauth_token
требуется Twitter и перенаправляет на страницу входа в Twitter сoauth_token
в качестве параметра запроса. - Пользователь входит в систему. При успешном входе в систему Twitter перенаправляет всплывающее окно браузера на настроенный
Callback URL
на API-интерфейсе вместе сoauth_token
а такжеoauth_verifier
параметры. - Бэкэнд API
Callback URL
получает эти параметры и обменивает ихoauth_token
а такжеoauth_token_secret
которые хранятся в фоновом режиме.
Мой вопрос в основном, что происходит дальше и как правильно и безопасно закрыть всплывающее окно и инициализировать сеанс:
Мой бэкэнд преобразует токен, сгенерированный в 3 выше, во внутренний токен JWT и перенаправляет всплывающее окно браузера torii/redirect.html?code=<<JWTTOKEN>>
, Однако, когда всплывающее окно браузера закрывается, Torii пытается повторно аутентифицировать данный токен, вызывая метод authenticate, который не требуется. Я сделал обходной путь, как показано выше в app/authenticators/torii.js
, Это правильно? Есть ли способ лучше?