我整理了一个简单的Aurelia应用程序尝试进行身份验证,该工具正常工作,除非您刷新浏览器并且应用程序的构造函数检查我们是否已经过身份验证,API调用失败。我希望API调用中的catch能够返回用户未登录的通知,或者用户实际上已经基于本地存储的令牌登录了。
来自文档: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;
});
}
更新
嗯,盯着屏幕的时间太长了。它按预期工作。当用户没有登录时,它就处于捕获状态。我主动认为这是一个异常,而不是在catch中调用console.error。呃答案 0 :(得分:1)
您的异常实际上是由您的捕获逻辑打印出来的:
}).catch(function(error){
console.error('Not authenticated!', error);
parent.authenticated=false;
});
Chrome调试器中的例外以Not Authenticated!
开头。