我无法在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
提前致谢。
答案 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以确保它属于正确的用户。
即使使用主密钥,也无法查询会话令牌。