我该如何在Node.js中维护我的SESSION?
例如,我想使用Node.js将UserID存储在SESSION中。我该如何在Node.js中实现这一点?同时,我是否可以在PHP中使用Node.js的SESSION?
我希望在Node.js中实现以下内容:
<?php $_SESSION['user'] = $userId; ?>
我该如何在Node.js中维护我的SESSION?
例如,我想使用Node.js将UserID存储在SESSION中。我该如何在Node.js中实现这一点?同时,我是否可以在PHP中使用Node.js的SESSION?
我希望在Node.js中实现以下内容:
<?php $_SESSION['user'] = $userId; ?>
npm install express-session --save
var express = require('express');
var session = require('express-session');
var app = express();
app.use(session({secret: 'ssshhhhh', saveUninitialized: true, resave: true}));
sess = req.session;
var user_id = 1;
sess.user_id = user_id;
sess = req.session;
sess.user_id
让我把你的问题分成两部分。
ExpressJS拥有官方的会话中间件,是当前Node.js的事实标准Web框架。
如果您希望自己实现会话支持,每个请求通常需要进行以下操作:
您还需要实现一些超时机制,以便在一段时间后删除会话对象,至少从内存中删除。
serializeUser()
和deserializeUser()
函数。您可以在这里查看,位于“Sessions”部分:配置Passport.js。会话提供了访问/查看用户区域的权限,同时也是一种凭证,因此我们可以在应用程序中使用它。
我使用了jsonwebtoken制作了一个令牌,在用户成功登录尝试后,该令牌将包含用户的详细信息和时间。我将其存储在Redis中,并且可以在预先声明的时间限制内使用。
在Node.js中,您可以使用“express-session”包来使用会话。
您需要在应用程序中安装express和express-session:
const express = require('express');
const session = require('express-session');
const app = express();
“secret”用于cookie,我们必须添加一些秘密来管理会话。 “request”作为请求变量使用,就像在PHP中使用$_SESSION一样。
var sess;
app.get('/',function(req,res){ // Get request from the app side
sess = req.session;
sess.email; // Equivalent to $_SESSION['email'] in PHP.
sess.username; // Equivalent to $_SESSION['username'] in PHP.
});
如果您想详细了解Node.js中的会话,可以在Code for Geek中查看完整文档。
在Express.js配置文件中:
var cookieParser = require('cookie-parser');
var session = require('express-session');
app.use(cookieParser());
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true,
rolling: true,
cookie: {
path: '/',
maxAge: 60000 * 1000
},
name: 'SID'
}));
登录后存储会话:
var session = req.session;
if (user) {
session.user = user._id;
session.save();
console.log(session);
}
从中间件检查会话:
var session = req.session;
if (session.user) {
req.userid = session.user;
next();
} else {
return res.status(401).send({
code: 401,
message: Constant.authentication_fails
});
}
const flash = require('express-flash')
const session = require('express-session')
const passport = require('passport')
app.use(session({
secret:'secret',
resave:false,
saveUninitialized:false
}))
app.use(flash())
app.use(passport.initialize())
app.use(passport.session())
3- 创建passport.js文件。您可以随意命名。因此,其基本理解是您必须检查来自输入表单的有效用户,并将电子邮件ID与您的模型进行比较。如果有效,请检查密码,然后返回用户。完成后,序列化和反序列化用户数据以存储在会话中。
我建议查看文档中的此部分,以获得更清晰的理解:概述
const localStrategy = require('passport-local').Strategy
const bycrypt = require('bcrypt')
const User = require('../model/User')
const initalize = function(passport) {
const auth = async(email, password, done) => {
try {
const user = await User.findOne({email:email})
if(!user) {
throw new Error("Incorrect Email ..!")
}
const match = await bycrypt.compare(password, user.password)
if(!match) {
throw new Error('Incorrect Password..!')
}
return done(null, user)
}
catch (error) {
console.log(error)
done(null,false,error)
}
}
passport.use(new localStrategy({usernameField:'email'}, auth))
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
}
module.exports = initalize
4 - 现在转到您的登录路由器并使用以下代码
const passport = require('passport')
require('../passport/passport')(passport)
routes.get('/signin', (req,res) => {
res.render('signin', {
pageTitle: 'sign in'
})
})
routes.post('/signin', passport.authenticate('local', {
successRedirect: '/welcome',
failureRedirect: '/',
failureFlash: true
}))
请按照以下步骤操作:
npm install express-session --save
编写以下代码:
var express = require('express');
var session = require('express-session');
var app = express();
app.use(session({secret: 'your secret key', saveUninitialized: true, resave: true}));
var userId = 1234;
app.get('/', function (req, res, next) {
req.session.userId = userId;
});