Я собрал простое приложение Aurelia, которое пытается выполнить аутентификацию, которая работает правильно, за исключением случаев, когда вы обновляете браузер и конструктор для проверки приложений, чтобы убедиться, что мы уже прошли аутентификацию, вызов API не работает. Я ожидал бы, что catch в вызове API вернет уведомление о том, что пользователь либо не зарегистрирован уже, либо что пользователь на самом деле уже зарегистрирован на основе локально сохраненного маркера.перья authenticate() Как использовать его без вызова api без параметров?
Из документов: https://docs.feathersjs.com/authentication/client.html
app.authenticate() пытается аутентифицировать с сервером, используя данные вы прошли его. Если вы не предоставите какие-либо опции, он попытается выполнить команду для аутентификации с использованием токена, хранящегося в памяти или в вашем хранилище . Он возвращает обещание.
Вот полное тестовое приложение, которое я использую для проверки этого. https://gitlab.com/sday/feathers-test
Вот конструктор код, который появляется на неудачу: https://gitlab.com/sday/feathers-test/blob/master/src/app.js
constructor() {
var parent=this;
const socket = io('http://localhost:3030');
this.f = feathers()
.configure(feathers.socketio(socket))
.configure(feathers.hooks())
.configure(feathers.authentication({ storage: window.localStorage }));
// This appears to be a problem. If I am in fact already logged in, the callback is made, the token and user object is returned.
// If the user is not logged in the catch isn't called, but an error is generated in the browser console.
// Error: Could not find stored JWT and no authentication type was given
// The docs indicate one should be able to call authenticate() without parameters to validate a current session.
this.f.authenticate().then(function(result){
console.log('Already Authenticated!', parent.f.get('token'));
parent.email=parent.f.get('user').email;
console.log("User:",parent.f.get('user'));
parent.authenticated=true;
}).catch(function(error){
console.error('Not authenticated!', error);
parent.authenticated=false;
});
}
UPDATE
Ну, случай, глядя на экран слишком долго. Он работает так, как ожидалось. Он находится в ловушке, когда пользователь не вошел в систему. Я играл главную роль в красном, считая, что это исключение, а не вызов console.error внутри catch. тьфу
Вы можете поместить функцию 'authenticate()' в функцию 'activate()' представления, потому что обещают 'активировать'. 'activate() {return this.f.authenticate(); } ' –
Я все еще получаю сообщение об ошибке. Если я вошел в систему, это сработает. Если я сделаю feathers.logout(), то обновите браузер, я получаю исключение, которое я поставил под вопрос. – sday
Используйте вкладку приложения в хроме, чтобы посмотреть на локальное хранилище, чтобы увидеть, есть ли JWT –