我安装了Auth0锁,可以在我的客户端登录,我的localStorage中有idToken
。
我将此idToken
发送到我的API服务器 - 一个FeathersJS服务器,它基本上是Express服务器的扩展。我使用JWT正确地进行了身份验证,但是我的req
对象中的用户是空的(这里称为student):
{ authenticated: true,
query: {},
provider: 'rest',
headers: { (truncated...) },
student: {},
payload:
{ iss: 'https://mydomain.eu.auth0.com/',
sub: 'myusername',
aud: 'myaudience',
exp: 1494125072,
iat: 1494089072 } }
最后5行是Auth0 idToken
中包含的有效负载。
当我考虑它时,我的student
用户对象为空的事实是正常的,因为应用程序不知道如何将Auth0用户链接到我的一个数据库用户。它由username属性完成。但是我如何告诉我的Feathers应用程序呢?是populateUser
还是类似的?
我记得老羽毛中有这样一个功能,但是新功能使用了常见的勾populate
功能:见here:
中使用新的
populateUser
- >在feather-hooks-commonpopulate
钩子
所以我尝试了这个新的populate
钩子,但不幸的是它只是一个After钩子,因为我想在发出请求之前填充用户,所以没有意义。
现在我被卡住了。我的意思是,我可以在填充用户之前编写自己的钩子,但我敢打赌,有一些更好的方法来实现我想要的。
以下是一些相关代码:
authentication.js
const authentication = require('feathers-authentication');
const jwt = require('feathers-authentication-jwt');
const oauth2 = require('feathers-authentication-oauth2');
const Auth0Strategy = require('passport-auth0').Strategy;
module.exports = function () {
const app = this;
const config = app.get('authentication');
// Set up authentication with the secret
app.configure(authentication(config));
app.configure(jwt());
app.configure(oauth2({
name: 'auth0',
Strategy: Auth0Strategy,
}));
// The `authentication` service is used to create a JWT.
// The before `create` hook registers strategies that can be used
// to create a new valid JWT (e.g. local or oauth2)
app.service('authentication').hooks({
before: {
create: [
authentication.hooks.authenticate(config.strategies)
],
remove: [
authentication.hooks.authenticate('jwt')
]
}
});
};
配置文件
{
...
"authentication": {
"entity": "student",
"service": "students",
"secret": "SAME_SECRET_AS_BELOW",
"strategies": [
"jwt"
],
"path": "/authentication",
"jwt": {
"header": {
"type": "access"
},
"audience": "SAME_AUDIENCE_AS_BELOW",
"subject": "anonymous",
"issuer": "https://mydomain.eu.auth0.com/",
"algorithm": "HS256",
"expiresIn": "1d"
},
"auth0": {
"clientID": "SAME_AUDIENCE_AS_ABOVE",
"clientSecret": "SAME_SECRET_AS_ABOVE",
"domain": "https://mydomain.eu.auth0.com/"
}
}
}