【问题标题】:Manage sessions in Cloud Code and current.user on Parse.com在 Parse.com 上管理 Cloud Code 和 current.user 中的会话
【发布时间】:2015-12-18 21:26:05
【问题描述】:

我将尝试以最清晰的方式解释我的问题。 我正在使用 jssdk 1.6.7。 为了管理会话,我使用 parse-express-cookie-session:

var parseExpressHttpsRedirect = require('parse-express-https-redirect');
var parseExpressCookieSession = require('parse-express-cookie-session');
app.use(parseExpressHttpsRedirect());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('mykey'));
app.use(parseExpressCookieSession({
  fetchUser: true,
  cookie: { maxAge: 3600000 }
}));
app.post('/login', function(req, res) {
  Parse.User.logIn(req.body.username, req.body.password).then(function() {
    res.send(true);
  }, function(error) {
    res.send(error);
  });
});

当我从网站登录时,cookie 会毫无问题地创建。当用户访问诸如 /prueba 之类的 URL 时,我使用以下命令检索用户:

app.get('/prueba', function(req, res) {
  res.send(Parse.User.current());
});

问题是当我在 Javascript 上调用客户端的云方法时,Parse.User.current() 和 request.user 始终为空,我无法获取 currentUser。有什么想法吗?

编辑以获取更多信息:

例如当我这样做时:

Parse.Cloud.run("getNumbersWords", {id: country, userc: cUser}, {
  success: function(count) {
    numberWords = count;
    changePalabra();
  },
  error: function(error) {
    console.log(error);
   }
});

我的 getNumbersWords 是:

Parse.Cloud.define('getNumbersWords', function (request, response) {
  console.error(request);
  var query = new Parse.Query("Pais");
  query.get(request.params.id).then( function(pais) {
    var queryP = new Parse.Query('Palabras');
    queryP.equalTo('idioma', pais.get('idioma').toLowerCase());
    return queryP.count();
  }).then( function(count) {
    response.success(count);
  }, function(error) {
    response.error({'resp': error.code, 'message': error.message});
  });
});

Parse.User.current()、request.user 和 request.params.sessionToken 为空。

【问题讨论】:

  • 让用户使用req.user提出请求
  • 感谢您的帮助,我编辑了我的帖子以添加更多信息

标签: javascript parse-platform


【解决方案1】:

好的,经过大量的挖掘,我已经解决了。 首先你需要在你的客户端做这样的事情:

Parse.User.logIn(usern, pass, {
  success: function(user) {
    var sess = user.get("sessionToken");
    $.ajax({
      type: 'POST',
      dataType: "json",
      data: {sessionToken: sess},
      url: "/login",
      success: function(resp) {
        console.log(resp)
      },
      error: function(error) {
        console.log(error);
      }
    });
  },
  error: function(error) {
    console.log(error);
  }
});

在您的服务器端,您的 /login 帖子必须是这样的:

app.post('/login', function(req, res) {
  var sessionToken = req.body.sessionToken;

  Parse.User.become(sessionToken).then(function (user) {
    res.send(true);
  }, function (error) {
    console.log(error);
    res.send(false);
  });
});

等等。 "become" 方法在浏览器中放置一个 cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2018-06-22
    • 1970-01-01
    相关资源
    最近更新 更多