TL; DR问题是如何从jwt
如果正在根据请求发送user
中的jwt
信息,但我不想仅向已登录的用户关闭端点,我想从中获取authenticate
的信息。
我不想使用user
钩子来关闭端点,但是我不知道如何在没有它的情况下获取jwt
信息。
我正在对CREATE TRIGGER id_adjust BEFORE INSERT on news_table
FOR EACH ROW
BEGIN
IF (SELECT count(*) FROM news_table)=0 THEN
SET NEW.id=999;
ELSE
SELECT min(id)-1 into NEW.id from news_table;
ENDIF;
END
使用本地策略。
答案 0 :(得分: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
}
要获取用户信息或允许匿名访问,请参见Anonymous Authentication cookbook recipe。
答案 1 :(得分:0)
您还可以在身份验证钩子上执行try
/ catch
,以尝试对路由进行身份验证,但不会因此而失败,例如
const tryAuth = async hook => {
try {
return await authenticate(hook);
} catch(err) {
// do nothing?
return hook;
}
};
在这种情况下,如果有有效的令牌,则您将拥有params.user
和authenticated = true
,否则就没有。
答案 2 :(得分:0)
使用“尝试/捕获”的方法不错,但是还有另一种基于钩子的方法。
1)创建自定义钩子isAuth.js
:
module.exports = (context) => {
return !!(context.params.headers.authorization
&& context.params.headers.authorization !== 'null'
&& context.params.headers.authorization !== '');
};
2)修复服务hooks.js
(app.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: {}
};
答案 3 :(得分: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: []
}
};
我刚刚验证了授权令牌已发送。