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