Parse / Node.js,用户会话管理(javascript sdk)。 Parse.User.current()不会持久化

时间:2015-06-08 00:28:13

标签: node.js parse-platform

我正在尝试在我自己托管的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 } }));

2 个答案:

答案 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()这样的基本函数停止工作,然后你必须永远搜索一些无证的解决方法。