有没有办法在parse.com上强制执行单一设备登录?

时间:2016-01-05 20:14:07

标签: ios swift facebook parse-platform login

我正在开发一个应用程序,我需要非常节省API请求,请求越少越好。问题是每个用户都有设置和消息,我想避免在每次唤醒时提取可能的更改。我不能依赖每个用户启用推送通知。

我的方法是妥协,以强制用户只能使用一台设备登录。如果他们尝试使用其他设备(通过Facebook)登录,则会收到错误消息,他们可以选择取消登录或继续远程注销其他设备。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。

  1. 查询登录后的会话数
  2. 如果数字大于1,请询问用户做什么
    • 退出其他设备(并继续) - > call" deleteAllOtherSessions"
    • 取消登录(并返回登录界面) - > call" deleteLastSession"
  3. 云代码:

    Parse.Cloud.define("getSessionCount", function(request, response) {
        if (request.user == null) {
            reportError("findSessions", "userCheck", 0);
            response.error("invalid user");
            return
        }
        var query = new Parse.Query(Parse.Session);
        query.find({
            success: function(results) {
                response.success(results.length);
            },
    
            error: function(error) {
                response.error(error);
            }
        });
    });
    
    Parse.Cloud.define("deleteAllOtherSessions", function(request, response) {
        if (request.user == null) {
            reportError("deleteAllOtherSessions", "userCheck", 0);
            response.error("invalid user");
            return
        }
    
        var sessionToken = request.params.sessionToken;
        var query = new Parse.Query(Parse.Session);
    
        // this query will find only sessions owned by the user since
        // we are not using the master key
        query.find().then(function(results) {
            var promises = [];
            _.each(results, function (result) {
                if(result.get("sessionToken") != sessionToken) {
                    promises.push(result.destroy());
                }
            });
            return Parse.Promise.when(promises);
        }).then(function() {
                response.success(true);
            },
            function(error) {
                response.error(error)
            });
    });
    
    
    Parse.Cloud.define("deleteLastSession", function(request, response) {
        if (request.user == null) {
            reportError("deleteLastSession", "userCheck", 0);
            response.error("invalid user");
            return
        }
    
        var sessionToken = request.params.sessionToken;
        var query = new Parse.Query(Parse.Session);
        query.descending("createdAt");
    
        // this query will find only sessions owned by the user since
        // we are not using the master key
        query.find().then(function(results) {
            var promises = [];
            console.log(results);
            promises.push(results[0].destroy());
            return Parse.Promise.when(promises);
        }).then(function() {
                response.success(true);
            },
            function(error) {
                response.error(error)
            });
    });
    

    希望能帮助某人。