Как прекратить дублирование пользовательских сессий с разбором?
Я хочу, чтобы мои сеансы PFS были исключительными. Это означает, что если пользователь уже вошел в систему на определенном устройстве в определенном месте, если другое устройство входит в систему с теми же учетными данными, я хочу прервать предыдущую сессию с сообщением бдительный взгляд конечно. Вроде как старый формат обмена мгновенными сообщениями AOL. так кто-нибудь знает, как бы я поступил так быстро? это потребует CoreLocation?
Я нашел эту статью о текущем местоположении пользователя, как я могу использовать это как часть решения моего вопроса?
https://www.veasoftware.com/tutorials/2014/10/18/xcode-6-tutorial-ios-8-current-location-in-swift
ОБНОВИТЬ
так что я только что прочитал эту статью об их настройках отзываемых сессий
http://blog.parse.com/announcements/announcing-new-enhanced-sessions/
однако, когда я вхожу в ту же учетную запись с другого устройства, сеансам разрешается жить соответственно, чего я не хочу. Как мне решить мою дилемму?
ОБНОВИТЬ
Я получил это очень подробное описание того, как добиться полного метода, который я пытаюсь реализовать:
однако я не очень хорошо разбираюсь в реализации облачного кода, может кто-то очень кратко изобразить фрагмент кода, похожий на то, что он пытается передать мне?
ОБНОВИТЬ
Поэтому я провел еще несколько исследований и связал то, что мне сказали, относительно того, как использовать вызовы облачного кода в синтаксическом анализе, и, поскольку я хочу уничтожить предыдущие сеансы currentUser, я написал следующий код при моем входе в систему "success логика:
PFUser.logInWithUsernameInBackground(userName, password: passWord) {
(user, error: NSError?) -> Void in
if user != nil || error == nil {
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("loginSuccess", sender: self)
PFCloud.callFunctionInBackground("currentUser", withParameters: ["PFUser":"currentUser"])
//..... Get other currentUser session tokens and destroy them
}
} else {
Если это даже правильный формат или код, но я уверен, что это верное направление, верно? Кто-нибудь может отредактировать или расширить код, который я пытаюсь достичь?
1 ответ
Вы должны начать с быстрого запуска облачного кода
Затем вы должны определить следующую функцию облачного кода:
Parse.Cloud.define('destroyUserSessions', function(req, res) {
//the user that sends the request
var currentUser = req.user;
//send from client
var currentUserInstallationId = req.param.installationId;
var Session = Parse.Object.extend('Session');
var userSessionQuery = new Parse.Query(Session);
//all sessions of this user
userSessionQuery.equalTo('user', currentUser);
//except the session for this installation -> to not log the request performing user out
userSessionQuery.notEqualTo('installationId', currentUserInstallationId);
userSessionQuery.find({
success: function(userSessionsToBeRevoked) {
Parse.Object.destroyAll(userSessionsToBeRevoked, {
success: function() {
//you have deleted all sessions except the one for the current installation
var installationIds = userSessionsToBeRevoked.map(function(session) {
return session.installationId;
});
//you can use the installation Ids to send push notifications to installations that are now logged out
},
error: function(err) {
//TODO: Handle error
}
});
},
error: function(err) {
//TODO: Handle error
}
});
});
ПРИМЕЧАНИЕ. Этот код не был протестирован и содержит несколько допущений, например, что у вас включены отменяемые сеансы, и при выполнении запроса вошел пользователь.
Вы бы назвали функцию так:
let installationId = PFInstallation.currentInstallation().installationId
PFCloud.callFunctionInBackground("destroyUserSessions", withParameters: ["installationId": installationId]) { success, error in
//TODO: Handle success or errors
}
Надеюсь, это поможет вам начать.