我从互联网下载了Node / Ionic
项目,然后......
我有以下内容:
...
exports.login = function(req, res, next) {
var userInfo = getUserInfo(req.user);
res.status(200).json({
token: 'JWT ' + generateToken(userInfo),
userInfo: userInfo
});
}
...
在其他配置文件中我有以下内容:
...
passport.use(
new JwtStrategy({
secretOrKey: credentials.secret,
jwtFromRequest: ExtractJwt.fromAuthHeader(),
},
function(payload, done) {
User.findById(
payload._id,
function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
}
}
);
}
)
);
...
在routes
文件中我有以下内容:
...
app.get(
'/api/auth/check',
passport.authenticate('jwt', { session: false }),
function(req, res) {
var user = req.user;
res.send({ content: 'Success', user: user });
}
...
然后,我有一个具体问题:
授权控制器文件中的'JWT'是什么?
...
token: 'JWT ' + generateToken(userInfo),
...
如果不是JWT
我想使用ABCDEF
呢?实际上,我尝试了不同于JWT
的其他字符串,它似乎继续工作,不明白为什么。我去了documentation,但目前尚不清楚。
答案 0 :(得分:0)
文档清楚说明如何执行此操作:
jwtFromRequest
(REQUIRED)接受请求作为唯一参数并将JWT作为字符串返回或返回null的函数。有关详细信息,请参阅请求中的Extracting the JWT。你在做:
new JwtStrategy({
secretOrKey: credentials.secret,
jwtFromRequest: ExtractJwt.fromAuthHeader()
}, ...)
这里有两个选项:
编写自己的函数来提取JWT:
function myExtractor(req) {
const jwt = req.header('ABCDEF')
// ... do work
return 'extractedJwtToken from work.'
}
使用提供的提取器,您可以指定自定义方案:
new JwtStrategy({
secretOrKey: credentials.secret,
jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('ABCDEF')
}, ...)