0

我目前正在开发一个需要用户登录片段的 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();
    });
});
4

0 回答 0