NodeJS + ExpressJS用户登录

时间:2015-07-04 18:49:17

标签: node.js api session express express-session

我目前正在开发一个需要用户登录代码段的网络应用程序。我已经构建了一个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();
    });
});

0 个答案:

没有答案