Node.js 用户登录express js时如何更新令牌?
我想在用户登录时更新用户集合中的令牌。到目前为止,我已经试过了Node.js 用户登录express js时如何更新令牌?,node.js,express,collections,token,express-jwt,Node.js,Express,Collections,Token,Express Jwt,我想在用户登录时更新用户集合中的令牌。到目前为止,我已经试过了 router.post("/login", (req, res, next) => { User.find({ email: req.body.email }) .exec() .then(user => { if (user.length < 1) { return res.status(401).json({ message: "Auth fa
router.post("/login", (req, res, next) => {
User.find({ email: req.body.email })
.exec()
.then(user => {
if (user.length < 1) {
return res.status(401).json({
message: "Auth failed"
});
}
bcrypt.compare(req.body.password, user[0].password, (err, result) => {
if (err) {
return res.status(401).json({
message: "Auth failed"
});
}
if (result) {
const token2 = jwt.sign(
{
email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
},
"123",
{
expiresIn: "1h"
}
);
User.update({token : token2 })
.exec()
return res.status(200).json({
message: "Auth successful",
token: token2
});
}
res.status(401).json({
message: "Auth failed"
});
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
router.post(“/login”,(请求、回复、下一步)=>{
User.find({email:req.body.email})
.exec()
。然后(用户=>{
if(user.length<1){
返回res.status(401).json({
消息:“身份验证失败”
});
}
bcrypt.compare(req.body.password,用户[0]。密码,(错误,结果)=>{
如果(错误){
返回res.status(401).json({
消息:“身份验证失败”
});
}
如果(结果){
const token2=jwt.sign(
{
电子邮件:用户[0]。电子邮件,iat:Math.floor(Date.now()/1000)-30
},
"123",
{
呼气蛋白:“1h”
}
);
update({token:token2})
.exec()
返回res.status(200).json({
消息:“验证成功”,
令牌:令牌2
});
}
res.status(401).json({
消息:“身份验证失败”
});
});
})
.catch(错误=>{
控制台日志(err);
res.status(500).json({
错误:错误
});
});
});
此处将生成新的令牌,但未将其保存在用户集合中。我想更新集合中的新令牌
有人知道我失踪在哪里吗?试试以下方法:
router.post("/login", async (req, res) => {
try{
const user = await User.find({ email: req.body.email });
if (user.length < 1) {
return res.status(401).json({
message: "Auth failed"
});
}
bcrypt.compare(req.body.password, user[0].password, (err, result) => {
if (err) {
return res.status(401).json({
message: "Auth failed"
});
}
if (result) {
const token2 = jwt.sign(
{
email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
},
"123",
{
expiresIn: "1h"
}
);
User.update({_id:user[0]._id},{$set:{token : token2 }},{new: true});
return res.status(200).json({
message: "Auth successful",
token: token2
});
}
res.status(401).json({
message: "Auth failed"
});
});
}
catch(err){
res.status(500).json({
error: err
});
}
});
router.post(“/login”),异步(req,res)=>{
试一试{
const user=wait user.find({email:req.body.email});
if(user.length<1){
返回res.status(401).json({
消息:“身份验证失败”
});
}
bcrypt.compare(req.body.password,用户[0]。密码,(错误,结果)=>{
如果(错误){
返回res.status(401).json({
消息:“身份验证失败”
});
}
如果(结果){
const token2=jwt.sign(
{
电子邮件:用户[0]。电子邮件,iat:Math.floor(Date.now()/1000)-30
},
"123",
{
呼气蛋白:“1h”
}
);
update({u-id:User[0].\u-id},{$set:{token:token2},{new:true});
返回res.status(200).json({
消息:“验证成功”,
令牌:令牌2
});
}
res.status(401).json({
消息:“身份验证失败”
});
});
}
捕捉(错误){
res.status(500).json({
错误:错误
});
}
});
尝试以下方法:
router.post("/login", async (req, res) => {
try{
const user = await User.find({ email: req.body.email });
if (user.length < 1) {
return res.status(401).json({
message: "Auth failed"
});
}
bcrypt.compare(req.body.password, user[0].password, (err, result) => {
if (err) {
return res.status(401).json({
message: "Auth failed"
});
}
if (result) {
const token2 = jwt.sign(
{
email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
},
"123",
{
expiresIn: "1h"
}
);
User.update({_id:user[0]._id},{$set:{token : token2 }},{new: true});
return res.status(200).json({
message: "Auth successful",
token: token2
});
}
res.status(401).json({
message: "Auth failed"
});
});
}
catch(err){
res.status(500).json({
error: err
});
}
});
router.post(“/login”),异步(req,res)=>{
试一试{
const user=wait user.find({email:req.body.email});
if(user.length<1){
返回res.status(401).json({
消息:“身份验证失败”
});
}
bcrypt.compare(req.body.password,用户[0]。密码,(错误,结果)=>{
如果(错误){
返回res.status(401).json({
消息:“身份验证失败”
});
}
如果(结果){
const token2=jwt.sign(
{
电子邮件:用户[0]。电子邮件,iat:Math.floor(Date.now()/1000)-30
},
"123",
{
呼气蛋白:“1h”
}
);
update({u-id:User[0].\u-id},{$set:{token:token2},{new:true});
返回res.status(200).json({
消息:“验证成功”,
令牌:令牌2
});
}
res.status(401).json({
消息:“身份验证失败”
});
});
}
捕捉(错误){
res.status(500).json({
错误:错误
});
}
});
尝试以下代码:
jwt.sign(
{
email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
},
"123",
{
expiresIn: "1h"
}, function(err, token2) {
User.update({token : token2 }).exec() //Change the query to update
return res.status(200).json({
message: "Auth successful",
token: token2
});
}
);
如果有帮助,请告诉我。请尝试以下代码:
jwt.sign(
{
email: user[0].email,iat: Math.floor(Date.now() / 1000) - 30
},
"123",
{
expiresIn: "1h"
}, function(err, token2) {
User.update({token : token2 }).exec() //Change the query to update
return res.status(200).json({
message: "Auth successful",
token: token2
});
}
);
如果有帮助,请告诉我。首先了解为什么需要刷新令牌。创建令牌后,您可以将该令牌作为会话变量存储在web、移动设备内部存储器等中 您可以创建另一个令牌,而不是刷新令牌。
通过另一种方式,您可以为令牌设置超时。令牌在该时间段后将无效 首先了解为什么需要刷新令牌。创建令牌后,您可以将该令牌作为会话变量存储在web、移动设备内部存储器等中 您可以创建另一个令牌,而不是刷新令牌。
通过另一种方式,您可以为令牌设置超时。令牌在该时间段后将无效 从find中删除.exec(),这也是因为使用then时,我们不需要.exec()来执行查询,它将被执行。然后,您必须在then used for find之外运行更新查询。最好从find中使用async with await.remove.exec(),因为使用then时,我们不需要.exec()要执行查询,它将被执行。然后您必须在用于查找的外部运行更新查询。最好使用async with await。我可以知道您的
MongoDB
版本吗?我想您的更新是在执行jwt.sign
之前进行的。看看你是否可以得到jwt.sign
的任何回调。我可以知道你的MongoDB
版本吗?我想你的更新发生在执行jwt.sign
之前。查看您是否可以获得jwt.sign
的任何回调。现在令牌没有得到打印,只有auth successful被打印。您可以放置控制台并检查令牌2的值吗@BhaktiThakkarnow令牌未获得打印仅打印身份验证成功您可以放置控制台并检查令牌2的值吗@巴克提萨卡