1

TL;DR 问题是如何从jwt

我正在尝试userjwt请求中发送的信息中获取 a 的信息,但我不想关闭端点以仅登录用户。

我不想用authenticate钩子关闭端点,但我不知道如何在user没有它的情况下获取信息。

我正在使用本地策略jwt

4

4 回答 4

1

即使您不使用身份验证挂钩,请求的身份验证信息(如果有)也将在params.authentication中可用。你可以在自己的钩子中做任何你想做的事情:

module.exports = () => async context => {
  const { authentication } = context.params;
  // authentication will e.g. be { strategy: 'jwt', accessToken }

  // do whatever you like here including throwing errors
}

要获取用户信息允许匿名访问,请参阅匿名身份验证食谱

于 2019-09-30T21:41:47.890 回答
1

“try/catch”的方法很好,但是还有另一种基于hooks的方法。

1)创建自定义钩子isAuth.js

module.exports = (context) => {
  return !!(context.params.headers.authorization
    && context.params.headers.authorization !== 'null'
    && context.params.headers.authorization !== '');
};

2) 修复服务hooks.jsapp.service('/my-url').hooks(hooks)),其中方法授权是可选的。注意:如果用户未被授权,则在“params.user”对象中“user”将不存在。

const { iff } = require('feathers-hooks-common');
const { authenticate } = require('@feathersjs/authentication').hooks;
const isAuth = require('isAuth');

module.exports = {
  before: {
    find: [iff(isAuth, authenticate('jwt'))],
  },
  after: {}
};
于 2019-10-03T13:52:19.027 回答
0

这是它对我有用的唯一方法。

const { iff } = require('feathers-hooks-common');
const { authenticate } = require('@feathersjs/authentication').hooks;

module.exports = {
    before: {
        all: [iff(
            (({ params: { headers: { authorization }}}) => authorization),
            authenticate('jwt')
        )],
        find: [],
        get: [],
        create: [],
        update: [],
        patch: [],
        remove: []
    },

    after: {
        all: [],
        find: [],
        get: [],
        create: [],
        update: [],
        patch: [],
        remove: []
    },

    error: {
        all: [],
        find: [],
        get: [],
        create: [],
        update: [],
        patch: [],
        remove: []
    }
};

我刚刚验证了授权令牌已发送。

于 2019-11-23T15:43:46.737 回答
0

您还可以在 authenticate 钩子周围做一个try/来尝试对路由进行身份验证,但不会因此而失败,例如catch

const tryAuth = async hook => {
  try {
    return await authenticate(hook); 
  } catch(err) {
    // do nothing?
    return hook;
  }
};

在这种情况下,如果有一个有效的令牌,你就会有params.userauthenticated = true否则没有。

于 2019-10-01T00:39:18.483 回答