2017-02-06 58 views
0

我正在将应用程序从parse.com迁移到buddy.com。一个迁移的警告的是,Parse.User.current()是buddy.com不再可用,而是你必须得到来自请求本身的用户和会话令牌:https://github.com/ParsePlatform/Parse-Server/wiki/Compatibility-with-Hosted-Parse#no-current-user解析好友注销用户

我迁移应用程序有一个logoutUser的方法,我在尝试迁移:

Parse.Cloud.define("logoutUser", function(request, response) { 
    Parse.User.logOut().then(
     function onSuccess(result){ 
      response.success(result); 
     }, 
     function onError(error) { 
      response.error(error); 
     } 
    ) 
}); 

现在我试图做到这一点,在新的风格,但我收到一个错误。 (注意:这是云计算的代码不是环境的NodeJS)

{ 
    "code":"500", 
    "error":"Error: There is no current user user on a node.js server environment." 
} 

新的实现:如何正确注销在解析用户的好友云代码

function logoutUser(request, response) { 
    var user = request.user; 
    var sessionToken = user.getSessionToken(); 

    Parse.User.logOut({ sessionToken }).then(
     function onSuccess(result){ 
      response.success(result); 
     }, 
     function onError(error) { 
     response.error(error); 
     } 
    ) 
} 

Parse.Cloud.define("logoutUser", function(request, response) { 
    logoutUser(request, response); 
}); 

建议?

+0

不确定你在这里要做什么。由于在任何云代码环境中没有当前用户,他们不能被注销。建议获取请求用户和会话令牌的解决方案是在运行任何Parse.Query时传递令牌。您不必使用云代码注销用户,只能在本地设备/浏览器上注销。 – EReid

+0

@EReid嗯好吧,也许我误解了。我对Cloud Code和这个应用程序很陌生。所以我想这意味着注销从未在这个应用程序工作,因为注销功能是云代码功能。 –

+0

@EReid当你说在设备上本地注销时,是否与解析有关?或者仅仅是应用程序本身? –

回答

0

你可以获取用户的会话或会话并删除它/它们:

var query = new Parse.Query("_Session"); 
    query.descending('createdAt'); 
    query.equalTo('user', {__type:"Pointer", className:"_User", objectId:"idhere"}); 
    query.first({ 
    useMasterKey: true 
    }).then(function(session) { 
    var sessions = []; 
    sessions.push(session); 
    Parse.Object.destroyAll(sessions); 
    }, function (err) { 
     console.log("Internal error " + err); 
    }); 

或了解更多的令牌,你可以使用发现的,而不是第一个,如:

var query = new Parse.Query("_Session"); 
    query.equalTo('user', {__type:"Pointer", className:"_User", objectId:"idhere"}); 
    query.find({ 
    useMasterKey: true 
    }).then(function(sessions) { 
    Parse.Object.destroyAll(sessions); 
    }, function (err) { 
     console.log("Internal error " + err); 
    }); 

以上将主要删除或与给定用户相关的令牌。如果你希望只删除用于登录令牌,而不能用于注册或升级,那么你可以把你的查询:

query.equalTo('createdWith', { action: 'login', authProvider: 'password'}); 

据我所知,删除用户的上次使用的登录令牌,然后他被注销。

0

要添加上述内容,如果您通过X-Parse-Session-Token标头将用户的会话密钥传递给云代码功能,则可以直接在会话查询中使用填充的request.user对象,而不是的用户ID。