javascript - 如何将 token 设置为本地存储或 cookie,以便我可以允许用户访问某些网页

标签 javascript node.js express

我正在尝试构建一个身份验证系统,所以我使用了 Node 、mysql、express 所以现在我只是保存并检查数据库中是否存在用户可以访问但现在我向它添加了 JWT,所以现在我想要这个 JWT token 存储在 localstorage 或 cookie 中,有人可以指导我该怎么做吗

这是我的身份验证controller.js

var Cryptr = require('cryptr');
cryptr = new Cryptr('myTotalySecretKey');
var express = require('express');
const ap = express();
var jwt = require('jsonwebtoken');
var connection = require('./../config');

module.exports.authenticate = function (req, res) {
    var email = req.body.email;
    var password = req.body.password;


    connection.query('SELECT * FROM users WHERE email = ?', [email], function (error, results, fields) {
        if (error) {
            res.json({
                status: false,
                message: 'there are some error with query'
            });
        } else {

            if (results.length > 0) {
                decryptedString = cryptr.decrypt(results[0].password);
                if (password == decryptedString) {
                    jwt.sign({ email, password },
                        'secretkey',
                        { expiresIn: '10days' },
                        (err, token) => {
                            console.log('token:' + token);
                            module.exports = token;
                            console.log(token);
                            res.redirect('/home.html');
                        }
                    );

                } else {
                    res.redirect('/login.html');
                    console.log("Wrong Input");

                }

            }
            else {
                res.redirect('/login.html');
            }
        }
    });
};

现在我想将 token 值传递给本地存储或 cookie,以便我可以限制某人访问页面,我对 node js 真的很陌生,所以任何帮助都会得到帮助

最佳答案

首先我要通知你不要在 jwt payload 中放置任何 secret 的东西,比如密码 因为 payload 的值可以很容易地访问,你可以尝试在 jwt.io 中复制粘贴一个 jwt站点并查看有效负载。

像下面这样在 cookie 中设置 jwt,这将使用 express cookie method that does set Http Set-Cookie header :

res.cookie('jwt', generated_cookie)
   .redirect('/home.html');

此外,如果你想使用 localStorage,你可以在 header 中设置 jwt,然后在你的代码中从登录请求的 header 中获取 jwt,并将其保存在 localStorage 中,之后你应该将其作为所有其他请求中的 header ,但这种方法是 api 调用的更好解决方案,例如当您使用 react 或 vue 时 ...

res.set({x-token: generated_token});

// In your code get 
// get token from response
localStorage.setItem('token', token);
// now whenever calling api pass token as header

关于javascript - 如何将 token 设置为本地存储或 cookie,以便我可以允许用户访问某些网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57848043/

相关文章:

javascript - 将包含数组的 Javascript 对象序列化为 json?

javascript - iOS 和 Android 中的任何浏览器是否允许在应用程序(浏览器)处于非 Activity 状态/后台时触发事件?

javascript - 使用 NodeJS 以 C# 格式访问服务器的 API session 时出现问题

mysql - 使用nodejs和express从查询参数更新mysql数据表

javascript - 为什么 node-sass-middleware 不工作?

javascript - 选择 li 元素内的文本,而不是 childs?

Javascript 闭包解释与代码示例

javascript - 如何计算 ObjectId 数组中 ObjectId 的出现次数并将结果附加到要返回的每个文档?

node.js - 如何使用 HomeBrew 安装 nodejs 4.1.2

javascript - 让用户对每个主题仅投票一次,但他们可以改变主意