我是Express 4的新手,我想知道如何实现这个东西:我正在使用jwt来验证我的API的消费者,为此我有一个非常简单的中间件来检查jwt令牌的有效性:
var requireValidToken = function(req, res, next) {
var token = req.body.token || req.query.token || req.headers['x-access-token'];
if (token) {
try {
var decoded = jwt.verify(token, req.app.get('superSecret'));
} catch(err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
}
req.user = decoded.user;
next();
} else {
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
};
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但现在,我想扩展这个以便能够检查用户的角色:
router.get('/anAdminRoute', requireRole('ROLE_ADMIN'), function (req, res, next) {
// some code...
});
Run Code Online (Sandbox Code Playgroud)
所以我为此添加了一个中间件:
var requireRole = function(role) {
return …Run Code Online (Sandbox Code Playgroud) 我已经通过新的simple_form functionnality实现了自定义身份验证器
main:
pattern: ^/
simple_form:
authenticator: custom_authenticator
provider: fos_userbundle
csrf_provider: form.csrf_provider
remember_me:
key: "%secret%"
lifetime: 31536000 # 365 jours
path: /
domain: ~
name: my_remember_cookie
Run Code Online (Sandbox Code Playgroud)
我的Authenticator中的authenticateToken()方法如下所示:
try {
$user = $userProvider->loadUserByUsername($token->getUsername());
} catch (UsernameNotFoundException $e) {
throw new AuthenticationException('Unknown user');
}
if ($user->isLocked() === true) {
throw new AuthenticationException('User locked');
}
if (/* Logic checks */) {
return new UsernamePasswordToken(
$user, null, $providerKey, $user->getRoles()
);
}
Run Code Online (Sandbox Code Playgroud)
我想知道,从这一点来说,是否有一种方法以编程方式设置记住我的cookie(在我的情况下,我想根据用户的角色设置它)?
编辑:我解决了它感谢sebbo,重点是在将请求对象传递给rememberMe服务之前手动设置$ request对象中的remember_me参数.
我的最终代码:
/**
* onAuthenticationSuccess
*
* @param Request $request …Run Code Online (Sandbox Code Playgroud)