Как прекратить дублирование пользовательских сессий с разбором?

Я хочу, чтобы мои сеансы 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
}

Надеюсь, это поможет вам начать.

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