У меня есть маршрут, который должен быть AuthenticatedRouteMixin
или UnauthenticatedRouteMixin
в зависимости от ответа, возвращаемого с сервера. Как это реализовать?Ember simple-auth AuthenticatedRouteMixin или UnauthenticatedRouteMixin на маршруте в зависимости от состояния
В настоящее время у меня есть маршрут с AuthenticatedRouteMixin
, и я заставляю маршрут проходить аутентификацию и деактивировать, переопределяя мою beforeModel и реализуя действие willTransition следующим образом.
beforeModel() {
this.set('session.isAuthenticated', true);
return this._super(...arguments);
}
И
actions: {
willTransition: function(){
if (Ember.isEmpty(_this.get('session.data.authenticated.token')))
{
this.set('session.isAuthenticated', false);
}
}
}
Однако есть две проблемы с этим.
- Он выглядит и чувствует себя не так. Вероятно, есть лучший способ сделать это .
Есть некоторые непредвиденные последствия для этого. Если вы не вошли в систему и попробуйте войти в систему, пользователь должен обновить страницу до перенаправления на соответствующую страницу. Я заглянул в простой-auth-код, и функция transitionTo работает не так, как ожидалось.
sessionAuthenticated() { const attemptedTransition = this.get('session.attemptedTransition'); if (attemptedTransition) { attemptedTransition.retry(); this.set('session.attemptedTransition', null); } else { this.transitionTo(Configuration.routeAfterAuthentication); } }
this.transitionTo(Configuration.routeAfterAuthentication);
является линией, которая не переходит. Я проверил, что Configuration.routeAfterAuthentication
установлен правильно.
Я могу заставить перезагрузиться на маршруте входа в систему или когда когда-либо направлялся пользователь, но (я думаю) из-за проблемы 2 выше, я бегу в бесконечные переадресации.
Я хотел бы сделать что-то вроде следующего:
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import UnauthenticatedRouteMixin from 'ember-simple-auth/mixins/unauthenticated-route-mixin';
const { service } = Ember.inject;
var mixin;
if (service('session').isAuthenticated){
mixin = AuthenticatedRouteMixin;
}
else{
mixin = UnauthenticatedRouteMixin;
}
export default Ember.Route.extend(mixin, { ... })
Однако, я не получаю информацию от сессии. Я не уверен, но, возможно, для загрузки этой информации необходимо загрузить конкретный Ember.Route
.
Любая помощь будет очень признательна.
Update
Я могу заставить перезагрузки на пути входа или где-либо маршрут пользователя переходит к, но (я думаю) из-за вопросом 2 выше, я бег в бесконечные перенаправления.
Я понял этот часть вне. Я просто установил ключ/значение в сеансе. Если это правда, перезагрузите и удалите ключ или установите его на false, поэтому перезагрузка произойдет только один раз.
Спасибо Lux. Это не сработало для меня. Я вижу обновление сеанса, как и следовало ожидать, но «this.transitionTo (Configuration.routeIfAlreadyAuthenticated);» не переходит на маршрут, указанный в «Configuration.routeIfAlreadyAuthenticated». Мне еще нужно нажать «Обновить», чтобы увидеть перенаправление. – user2517182
@ user2517182 то что-то не так с вашей конфигурацией или маршрутом. Постарайтесь обеспечить нерабочую работу. – Lux
Я обновил свой код и сделал что-то похожее на то, что у вас здесь. Это решило мою проблему. Благодаря! – user2517182