如何使用护照 js 在 req.body 中添加用户?
How to add user in req.body using passport js?
没有护照,我添加了简单的中间件来授权用户,如下所示。
const jwt = require('jsonwebtoken');
module.exports = (req, res, next) => {
const authHeader = req.get('Authorization');
const token = authHeader.split(' ')[1];
let jwttoken;
try {
jwttoken = jwt.verify(token, 'secret');
} catch (err) {
err.statusCode = 500;
throw err;
}
if (!jwttoken) {
const error = new Error('Not authenticated.');
error.statusCode = 401;
throw error;
}
req.userId = jwttoken.userId;
next();
};
有了护照,我添加了如下中间件
const options = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'SECRET'
}
module.exports = (passport) => {
passport.use(new Strategy(options, async (payload, done) => {
await user.findByPk(payload.userId).then(user => {
if (user) {
return done(null, user);
}
return done(null, false);
}).catch(error => {
return done(null, error);
});
}));
}
问题:就像我在没有护照的情况下添加用户请求一样req.userId = jwttoken.userId,如何我们可以用 passport 中间件来做吗?
在护照上,这是通过 module.exports:
上的那行代码完成的
return done(null, user);
这告诉 passport 信息应该发送到 req.user 的下一个回调函数。
例如,如果您 "user.findByPk(payload.userId)" 响应类似于:
{
"name": <NAME>
"profile": <profile>
}
在受保护端点的回调中,您应该会在 req.user 上看到它。
For example:
app.post('/profile', passport.authenticate('jwt', { session: false }),
function(req, res) {
res.send(req.user.profile);
}
);
req.user.profile 等于 "user.findByPk(payload.userId)" 响应。
没有护照,我添加了简单的中间件来授权用户,如下所示。
const jwt = require('jsonwebtoken');
module.exports = (req, res, next) => {
const authHeader = req.get('Authorization');
const token = authHeader.split(' ')[1];
let jwttoken;
try {
jwttoken = jwt.verify(token, 'secret');
} catch (err) {
err.statusCode = 500;
throw err;
}
if (!jwttoken) {
const error = new Error('Not authenticated.');
error.statusCode = 401;
throw error;
}
req.userId = jwttoken.userId;
next();
};
有了护照,我添加了如下中间件
const options = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'SECRET'
}
module.exports = (passport) => {
passport.use(new Strategy(options, async (payload, done) => {
await user.findByPk(payload.userId).then(user => {
if (user) {
return done(null, user);
}
return done(null, false);
}).catch(error => {
return done(null, error);
});
}));
}
问题:就像我在没有护照的情况下添加用户请求一样req.userId = jwttoken.userId,如何我们可以用 passport 中间件来做吗?
在护照上,这是通过 module.exports:
上的那行代码完成的return done(null, user);
这告诉 passport 信息应该发送到 req.user 的下一个回调函数。
例如,如果您 "user.findByPk(payload.userId)" 响应类似于:
{
"name": <NAME>
"profile": <profile>
}
在受保护端点的回调中,您应该会在 req.user 上看到它。 For example:
app.post('/profile', passport.authenticate('jwt', { session: false }),
function(req, res) {
res.send(req.user.profile);
}
);
req.user.profile 等于 "user.findByPk(payload.userId)" 响应。