【发布时间】:2015-01-08 06:28:02
【问题描述】:
我正在尝试在 RESTful 环境中设置通行证,但无法让用户序列化到会话数据中。不过,登录和注册效果很好。
我或多或少地遵循 scotch.io 的教程,但我做了一些调整,使其可以通过 RESTful API 工作。
简而言之,这是我的服务器设置:
var express = require("express"); // v 4.8.5
var cookieParser = require("cookie-parser"); // v 1.3.3
var bodyParser = require("body-parser"); // v 1.9.0
var session = require("express-session"); // v 1.8.2
var passport = require("passport"); // v 0.2.1, passport-local is v 1.0.0
var app = express();
require("./config/Passport")(passport);
app.use( morgan('dev') );
app.use( cookieParser(secret) );
app.use( bodyParser.json() );
app.use( bodyParser.urlencoded({extended:true}) );
app.use( session({secret:secret, resave:true, saveUninitialized:true, cookie:{httpOnly: false, secure:false, maxAge:cookie_max_age}}) );
app.use( passport.initialize() );
app.use( passport.session() );
app.use( less(publicPath, {compiler:{compress:false}}) );
app.use( express.static(publicPath) );
var router = express.Router();
require( appBase + "Routes" )(router, passport);
app.use( '/api', router );
var server = app.listen(8088);
现在,在我的路由器中,我已将登录路由定义如下:
router.post("/login", function(req, res, next)
{
passport.authenticate("local-login", function(error, user, info)
{
if(error) return next(error);
if(!user) return response.send({success:false, message:info.message});
return response.send({success:true, message:"Login successful.", user:user});
})(request, response, next);
});
我想在这里简明扼要,但我的用户序列化和反序列化函数中也有控制台跟踪,它们没有受到影响。我也有一些日志记录来告诉我会话变量发生了什么,这几乎也没有显示任何内容。 cookie 信息中有一个护照变量,但它是空的。
我猜我的问题在于我没有使用默认情况下应该使用的重定向护照的默认机制,但到目前为止我一直无法弄清楚它到底是什么。我的第二个猜测是 cookie 和会话的东西没有正确设置。 scotch.io 教程是为更旧版本的 express 编写的,我不得不进行更改以使所有内容都保持最新。
【问题讨论】:
标签: node.js rest session cookies passport.js