[英]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.