i 在中存储 JWT 令牌 Cookie 但它不起作用

问题描述 投票:0回答:1

//登录用户和授权用户

exports.userLogin = async (req, res) => { const { 电子邮件,密码 } = req.body;

try {
  const user = await User.findOne({ email: email }).select('+password');
  if (!user) {
    return res.status(404).json({ message: "Invalid Email" });
  } 
  else if (user.password !== password) 
  {
    return res.status(404).json({ message: "Invalid password" });
  }
   else {
    const token = user.getJwtToken()
    const options = 
    {
        expires:new Date(Date.now()+process.env.COOKIE_EXPIRES_TIME*24*60*60*1000),
        httpOnly:true,
        Secure:true
    }
    res.status(201).cookie('token',token,options).json({
      token: token,
      user:user
    });
  }
} catch (err) {
  console.log("something went wrong: " + err.message);
}

};

我将令牌存储在 cookie 中但它不起作用我检查 cookie 中的令牌是否为空

node.js cookies jwt token bearer-token
1个回答
0
投票

我在我的系统中使用

jsonwebtoken
express
尝试了上述场景,并且能够在响应标头中看到 cookie。也许问题出在第 1 行的方法
user.getJwtToken()
上。 11. 如果你在第 11 行下面添加一个日志并检查
token
的值是否得到任何值,那就太好了。

尝试了下面的方法,效果很好。

const express = require('express');
const jwt = require('jsonwebtoken');

const app = express();

const start = (port) => {
    try {
        app.listen(port, () => {
            console.log(`Api up and running at: http://localhost:${port}`);
        });
    } catch (error) {
        console.error(error);
        process.exit();
    }
};

start(3333);

app.get('/login', (req, res) => {
    const token = jwt.sign({ id: 7, role: 'captain' }, 'TEST_JWT');
    return res
        .status(201)
        .cookie('token', token, {
            expires: new Date(Date.now() + 1 * 24 * 60 * 60 * 1000),
            httpOnly: true,
            secure: true,
        })
        .json({ message: 'Logged in successfully!!!' });
});

此外,不建议在电子邮件不存在时显示

Invalid Email
,在密码不匹配时显示
Invalid Password
,因为无论特定用户是否使用该应用程序都可能导致安全问题。所以,当上述任何一种情况是
Invalid Email or Password
时,最好使用像
false
这样的东西。

if (!user || user.password !== password) {
    return res.status(404).json({ message: "Invalid Email or Password" });
} 
© www.soinside.com 2019 - 2024. All rights reserved.