我正在尝试在我自己托管的node.js服务器中使用parseExpressCookieSession模块,该服务器使用服务器端的解析javascript SDK模块。我按照此处的说明设置服务器以自动保留Parse.User.current()对象中的用户会话。
但是,Parse.User.current()对象在成功登录后向node.js服务器发出新请求时始终为null。附件是我的server.js文件的设置代码。
server.js:
var express = require('express');
var app = express(); // create our app w/ express
var morgan = require('morgan'); // log requests to the console (express4)
var bodyParser = require('body-parser'); // pull information from HTML POST (express4)
var methodOverride = require('method-override'); // simulate DELETE and PUT (express4)
var logger = require('./logger');
var api = require('./api.js');
var config = require('./config');
GLOBAL.Parse = require('parse').Parse;
Parse.initialize(config.parse.appID, config.parse.jsKey);
var cookieParser = require('cookie-parser');
var parseExpressHttpsRedirect = require('parse-express-https-redirect');
var parseExpressCookieSession = require('parse-express-cookie-session');
// configuration =================
app.use(parseExpressHttpsRedirect());
app.use(express.static(__dirname + '/public'));
app.use(morgan("dev", { "stream": logger.stream }));
app.use(bodyParser.urlencoded({'extended':'true'}));
app.use(bodyParser.json());
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(methodOverride());
app.use(cookieParser(config.parse.jsKey));
app.use(parseExpressCookieSession({ cookie: { maxAge: 3600000 } }));
答案 0 :(得分:4)
我最终使用Parse的Parse.User.become()方法,而不是尝试使用Parse Express Cookie中间件。您必须使用CookieParser和CookieSession包并包含它们:
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session');
设置它们:
app.use(cookieSession({
name: COOKIE_NAME,
secret: COOKIE_SECRET,
maxAge: 15724800000
}));
app.use(cookieParser(COOKIE_SECRET));
在登录和注册功能中,在Cookie中设置用户的会话令牌:
Parse.User.logIn(username, password, {
success: function(user) {
console.log(user);
req.session.token = user._sessionToken;
res.sendStatus(200);
},
error: function(user, error) {
res.status(400).send(error);
}
});
最后,在响应可能需要用户登录的任何请求之前,请检查cookie中是否存在sessionToken,然后使用该会话令牌设置用户:
Parse.User.become(req.session.token ? req.session.token : "NoTokenFound").then(function (user) {
// Do something now that we have a Parse.User stored in the "user" var
}, function (error) {
console.log(error);
res.sendStatus(200);
});
答案 1 :(得分:0)
Parse.User.enableUnsafeCurrentUser()
这是没有证件的,但有效。我不知道为什么解析的维护者决定像Parse.User.current()这样的基本函数停止工作,然后你必须永远搜索一些无证的解决方法。