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'});
Насколько я знаю, удаляя последний использовавшийся для токена логин пользователя, то он выходит из системы.