2017-02-06 11 views
0

Я собрал простое приложение 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; 
    }); 
    } 

enter image description here

UPDATE

Ну, случай, глядя на экран слишком долго. Он работает так, как ожидалось. Он находится в ловушке, когда пользователь не вошел в систему. Я играл главную роль в красном, считая, что это исключение, а не вызов console.error внутри catch. тьфу

+0

Вы можете поместить функцию 'authenticate()' в функцию 'activate()' представления, потому что обещают 'активировать'. 'activate() {return this.f.authenticate(); } ' –

+0

Я все еще получаю сообщение об ошибке. Если я вошел в систему, это сработает. Если я сделаю feathers.logout(), то обновите браузер, я получаю исключение, которое я поставил под вопрос. – sday

+0

Используйте вкладку приложения в хроме, чтобы посмотреть на локальное хранилище, чтобы увидеть, есть ли JWT –

ответ

1

Вашего исключения фактически печатаются улов логика:

}).catch(function(error){ 
    console.error('Not authenticated!', error); 
    parent.authenticated=false; 
}); 

Вашего исключение в хроме отладчике начинается с Not Authenticated!.