从节点 js 服务器文件向浏览器添加 cookie

Posted

技术标签:

【中文标题】从节点 js 服务器文件向浏览器添加 cookie【英文标题】:adding cookies to the browser from the node js server file 【发布时间】:2020-01-18 08:33:48 【问题描述】:

我的 index.js 文件一个节点 js 文件如下所示

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
let cryptr = require('cryptr');
let localStorage = require('node-localstorage');
cryptr = new cryptr('myTotalySecretKey');
const jwt = require('jsonwebtoken');
var dir = path.join(__dirname, 'public');
const app = express();
app.use(cookieParser());
app.use(express.static(dir));
app.use(bodyParser.urlencoded( extended: true ));
app.use(bodyParser.json());
app.use(express.static(__dirname + 'public'));

var mysql = require('mysql');
var connection = mysql.createConnection(
    host: 'localhost',
    user: 'trello',
    password: 'trello',
    database: 'trello'
);
connection.connect(function (err) 
    if (!err) 
        console.log("Database is connected");
     else 
        console.log("Error while connecting with database");
    
);
module.exports = connection;

app.post('/Authenticate', (req, res) => 
    let email = req.body.email;
    let password = req.body.password;
    let sql = 'select * from users where email = ?';
    let values = [[email]];

    connection.query(sql, [values], function (err, result) 
        if (err) throw err;

        if (result.length > 0) 
            decryptedString = cryptr.decrypt(result[0].password);
            if (password == decryptedString) 
                console.log('user is logged in: ');

                jwt.sign( result , 'secretkey', (err, token) => 
                    console.log('token = ' + token);
                    res.cookies('email', req.body.email);


                );

                return res.redirect('/home.html');
             else 
                res.redirect('/login.html');
            
        
    );
);

app.listen(3000);

但我无法将 cookie 设置到客户端,即在浏览器上,我使用 res.cookie(key, value) 但它没有工作任何人都可以指导为什么会发生这种情况,我对 node js 还是很陌生并表达js

【问题讨论】:

【参考方案1】:

您输入的似乎是res.cookies(),而不是res.cookie()。这看起来是个问题,虽然我可能是错的。

小提示:验证用户身份时,最好使用会话。这只是意味着 cookie 值存储在数据库(或其他地方)中,而浏览器仅存储该会话唯一的 ID。这可以防止恶意人员窃取密码等。 Express 有一个名为express-session 的模块,这就是我使用的。 Here's 一个 MySQL 插件。只是需要调查一下。

更多信息:What is the difference between server side cookie and client side cookie?

【讨论】:

感谢 Caleb,我已经更改了它,但顺便说一下,它仍然无法正常工作,感谢您告诉我有关 express-sessions 的信息 嗯...这很奇怪。请问module.exports在这里完成了什么?

以上是关于从节点 js 服务器文件向浏览器添加 cookie的主要内容,如果未能解决你的问题,请参考以下文章

js/java 获取添加修改删除cookie(最全)

是否可以向服务器发送带有多个 cookie 的 HTTPS 请求?云端节点js

js - cookie

cookie解析

一段js代码怎么只运行一次

js cookie