【发布时间】:2020-09-18 04:12:49
【问题描述】:
开发者您好,问题很简单,
我使用jwt.sign() 在我的登录功能中生成了jwt 令牌,并且我有模型/控制器/路由器架构,
所以问题是:如何将生成的令牌从登录控制器功能传递到路由器。
我已经尝试过多次将令牌分配给 const 变量以发送它抛出一个对象并将其发送到路由器文件,但是当我从 jwt.sign() 函数中退出时,它显示我是 undefined。
PS:我只是在后端使用NodeJS 和fastify 并使用Postman 发送http 请求我没有在前端使用任何框架
有一些代码可以帮助您了解我的情况:
UserRouter.js:(登录路由):
{
method: "POST",
url: "/api/login",
handler: (req, res) => {
UserController.login(req.body.email, req.body.password)
.then(result => {
//res.header("Access-Control-Allow-Origin", URL);
if (result.statusCode == 200) {
res.send({
status: 200,
error: null,
response: result.Message
//token: result.token
});
} else if (result.statusCode == 401) {
res.send(
JSON.stringify({
status: 401,
error: null,
response: result.Message
})
);
}
})
.catch(err => {
//res.header("Access-Control-Allow-Origin", URL);
res.send(JSON.stringify({ status: 300, error: err, response: null }));
});
}
}
用户控制器:
exports.login = async (user_email, password) => {
try {
console.log("Login into API");
const email = user_email.toLowerCase();
const user = await User.findOne({ email });
if (user) {
console.log(" Hashed Passwd ", user.password);
console.log("User Passwd", password);
let result = await bcrypt.compareSync(password, user.password);
if (result) {
// Tryed also with const = await jwt.sign()
jwt.sign({ user }, "secretkey", (err, token) => {
if (err) throw err;
console.log("The Token is", token);
});
return {
Message: "Login success",
statusCode: 200
//token: token
};
} else {
return { Message: "Incorrect password", statusCode: 401 };
}
} else {
return { Message: "ERROR" };
}
} catch (err) {
throw boom.boomify(err);
}
};
【问题讨论】:
-
当你想使用令牌时,为什么在 jwt.sign() 中使用回调。
-
只需使用
const token = jwt.sign({ user }, "secretkey"); -
成功了,非常感谢您的帮助!
-
好的,我将其正式化为答案
标签: javascript node.js