在node.js中解析登录 - 登录成功但“没有当前用户”

时间:2015-11-10 18:19:51

标签: javascript node.js parse-platform

我无法在node.js中与我的Parse数据进行交互。我能够成功登录,但Parse.User.current()返回null。运行以下代码后,我想查询只有该用户具有ACL读/写的数据。目前,该查询返回空,但如果我将该数据更改为公共读/写,我可以在终端中看到查询输出的结果。

这是我的node.js代码:

Prompt.get([{
name: 'username', 
required: true}, {
name: 'password',
hidden: true}], function (err, result) {
    if (err) {
        console.log('Error: ' + err);
    } else {
        Parse.User.logIn(result.username, result.password, {
        success: function(user) {
            console.log('LOGGED IN');
            console.log(user);
            console.log(Parse.Session.current());
            console.log(Parse.User.current());

            ... (query happens below this)

我的控制台输出:

prompt: username:  pablo
prompt: password:  
LOGGED IN
ParseUser { _objCount: 0, className: '_User', id: 'EXyg99egkv' }
ParsePromise {
  _resolved: false,
  _rejected: true,
  _resolvedCallbacks: [],
  _rejectedCallbacks: [],
  _error: 'There is no current user.' }
null

提前致谢。

2 个答案:

答案 0 :(得分:2)

这不是Parse.User.become()的用例吗?从解析文档:

  

如果您已创建自己的身份验证例程,或者以其他方式   登录到服务器端的用户,您现在可以通过会话   令牌到客户端并使用become方法。这种方法将确保   在设置当前用户之前,会话令牌有效。

Parse.User.become("session-token-here").then(function (user) {
  // The current user is now set to user.
}, function (error) {
  // The token could not be validated.
});

答案 1 :(得分:0)

我遇到了类似的问题,发现这个Parse blog解释了这个问题:

  

同样在Cloud Code中,返回当前用户的方法的概念是有意义的,就像在网页上的JavaScript中一样,因为只有一个活动请求而且只有一个用户。但是在像node.js这样的上下文中,不能有全局当前用户,这需要显式传递会话令牌。 Parse JavaScript SDK的1.6及更高版本已经要求这样做了,所以如果您使用的是该版本,那么您的库使用是安全的。

您可以在node.js环境中使用用户凭据执行查询,如下所示:

query.find({ sessionToken: request.user.getSessionToken() }).then(function(data) {
// do stuff with data
}, function(error) {
// do stuff with error
});

如果您希望在使用之前验证该令牌,请参阅explanation如何执行此操作:

  

一种方法是查询已知只能由用户读取的对象。您可以拥有一个存储此类对象的类,并让每个对象使用一个ACL来限制对用户本身的读取权限。如果对此类运行查询查询返回具有给定sessionToken的0个对象,则表示它无效。您可以更进一步,并比较用户对象ID以确保它属于正确的用户。

     

即使使用主密钥,也无法查询会话令牌。