繁体   English   中英

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

[英]Parse Login in node.js - Login successful but 'There is no current user'

我无法与node.js中的解析数据进行交互。 我能够成功登录,但是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

提前致谢。

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

如果您已经创建了自己的身份验证例程,或者以其他方式在服务器端登录了用户,则现在可以将会话令牌传递给客户端,并使用begin方法。 此方法将确保在设置当前用户之前会话令牌有效。

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.
});

我遇到了类似的问题,并找到了这个解释问题的Parse 博客

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

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

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

如果您希望在使用令牌之前先对其进行验证,请按照以下说明进行操作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM