我目前正在开发一个需要用户登录片段的 Web 应用程序。我已经构建了一个用于获取用户信息和其他信息的 API。但我不能让 NodeJS 与会话一起工作。
所以,我有一个这样的 API 端点用于登录:/api/v1/login
API 的其他端点使用Authorization包含Token e3f0d20dae2da4e3f0d20dae2da4值的标头。
我想要做的是,当用户未登录时,将他们重定向到登录页面,并且当用户将其凭据POST JSON数据提供给/api/v1/login并保存从正文返回的 Token 对象并将其用于其他 API 调用时。
登录端点返回:
{"token" e3f0d20dae2da4e3f0d20dae2da4: , "user_id": 1104}
好吧,实际上我已经让人们进入并使用该令牌进行请求,但我遇到的问题是当有两个或更多用户时,req.session值会覆盖到最新登录的用户。
我怎样才能让它工作?
谢谢。
编辑:
var express = require('express');
var session = require('express-session');
var router = express.Router();
var https = require('https');
var url = require('url');
var request = require('request');
var cookieParser = require("cookie-parser");
var FileStore = require('session-file-store')(session);
var sessionMW = session(
{
store: FileStore(),
secret: '$LSvj3KLSv2$$1!skv!!!!xxIf3eef5Fxc',
cookie: { maxAge: 36000, httpOnly: false },
resave: false,
saveUninitialized: false
});
router.get('/api/:endpoint/:first?/:second?/:third?', sessionMW, function(req, res, next) {
if(sess.token){
// make http request and return json data from server
} else {
// fail
}
router.post("/login", sessionMW, function(req, res, next){
var username = req.body.username;
var password = req.body.password;
var options = {
url: endpoints.login_request(),
method: 'POST',
json: {
"username" : username,
"password" : password
},
headers: {
'User-Agent' : 'Agent',
'Content-Type': 'application/json'
}
};
request(options, function(err, response, body) {
if(body.error){
res.send('{error:1}');
} else if(body.token) {
req.session.token = body.token;
req.session.user_id = body.user_id;
res.writeHead(302, {
'Location': '/#/home'
//add other headers here...
});
}
console.log(req.session);
res.end();
});
});