【问题标题】:Practical Use of JWT and cookies for Authentication实际使用 JWT 和 cookie 进行身份验证
【发布时间】:2020-12-19 00:57:30
【问题描述】:

我是一名自学成才的编码员,所以我对身份验证还比较陌生。我正在尝试将 JWT 令牌存储到 httpOnly cookie 中,并让中间件访问 cookie 以验证它当前是试图访问个人资料页面的用户。

登录后,我检查了网络选项卡,确实在标题中看到了 cookie 设置,但在我尝试将自己重定向到个人资料页面后,它说 cookie 未定义。谁能告诉我我做错了什么,为什么 cookie 没有传递到下一条路线?

登录

app.post('/users/login', async (req, res) => {
    const { email, password } = req.body;

    try {
        const foundUser = await User.findOne({ email });
        if (!foundUser) return res.status(404).send('User has not been found');

        const validPassword = await bcrypt.compare(password, foundUser.password);

        if (!validPassword) return res.status(400).send('Invalid email or password');

        const token = await foundUser.generateToken();

        // res.header('x-auth-token', token); //stores in local storage
        res.cookie("jwt", token, { secure: true, httpOnly: true });


        res.status(200).redirect('/users/profile')
    } catch (err) {
        res.send(err);
    }
})

中间件认证

const authToken = async (req, res, next) => {
    // const token = req.header('x-auth-token');
    const token = req.cookies.jwt;
    console.log(token);

    if (!token) return res.status(401).send('Please sign in to conintue.');

    try {
        const decodeUser = jwt.verify(token, "secrettunnel");
        const user = await User.findById({ _id: decodeUser._id });

        req.user = user;
        next();
    } catch (err) {
        res.status(400).send('Invalid Token');
    }
}

受保护的路线

app.get('/users/profile', auth, (req, res) => {
    res.render('profile');
})

【问题讨论】:

    标签: node.js authentication cookies jwt


    【解决方案1】:

    请确认您的 expressjs 应用程序中有“cookie-parser”。

    var cookieParser = require('cookie-parser')
    var app = express()
    app.use(cookieParser())
    

    【讨论】:

    • 是的,我做到了。当我查看网络选项卡时,cookie 会显示在标题中。
    • 能否请您使用节点版本和 package.json 依赖项更新帖子。另外,“req.cookies”是完全使用还是你在那里得到任何值?
    猜你喜欢
    • 2017-05-06
    • 2016-03-21
    • 2022-01-23
    • 2016-04-20
    • 2019-08-18
    • 2016-04-07
    • 2020-12-04
    • 2017-04-27
    • 2017-11-25
    相关资源
    最近更新 更多