FeathersJS + Auth0:已验证但未填充用户

时间:2017-05-06 17:23:47

标签: authentication auth0 feathersjs

我安装了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-common

中使用新的populate钩子

所以我尝试了这个新的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/"
    }
  }
}

0 个答案:

没有答案