Parse On Buddy Выход пользователя

Я перемещаю приложение с parse.com на buddy.com. Одним из предостережений миграции было то, что Parse.User.current() больше не доступен на buddy.com, вместо этого вы должны получить токен пользователя и сеанса из самого запроса: https://github.com/ParsePlatform/Parse-Server/wiki/Compatibility-with-Hosted-Parse

Мигрирующее приложение имеет 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);
});

Предложения о том, как правильно выйти из системы в облачном коде Parse on Buddy?

2 ответа

В дополнение к вышесказанному, если вы передаете ключ сеанса пользователя в функцию Cloud Code через заголовок X-Parse-Session-Token, вы можете напрямую использовать заполненный объект request.user в запросе сеанса вместо идентификатора пользователя.,

Вы можете получить сессию или сессии пользователя и удалить их / их:

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

ИЛИ для большего количества токенов вы могли бы использовать find вместо первого, например:

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

Насколько я знаю, удаляя последний использовавшийся для токена логин пользователя, то он выходит из системы.

Другие вопросы по тегам