如何使用Cordova和Azure移动应用程序缓存身份验证令牌?

时间:2017-03-07 19:38:42

标签: cordova azure authentication caching azure-mobile-services

如何使用客户端流方法缓存用户的Google身份验证令牌?

以下代码成功验证了用户,但每次用户关闭并重新打开应用时都会对其进行验证。

loginAzure = function (loginSuccess, handleError) {
    AzureDbSvc.client.login('google')
    .then(function () {
        // Obtain information about the authenticated use
        var url = AzureDbSvc.client.applicationUrl + '/.auth/me';
        var headers = new Headers();
        headers.append('X-ZUMO-AUTH', 
           AzureDbSvc.client.currentUser.mobileServiceAuthenticationToken);
        fetch(url, { headers: headers })
            .then(function (data) {
                var user_json = data.json();
                console.log('user_json:' + user_json);
                return user_json;
            }).then(function (tuser) {
                authUser.email = tuser[0].user_id;
                for (i = 0; i < tuser[0].user_claims.length; i++) {
                    switch (tuser[0].user_claims[i].typ) {
                        case "name":
                            authUser.userName = tuser[0].user_claims[i].val;
                            break;
                        case "picture":
                            authUser.picture = tuser[0].user_claims[i].val;
                            break;
                        case "locale":
                            authUser.locale = tuser[0].user_claims[i].val;
                            break;
                    }
                }

                loginSuccess(authUser);
            }
        );
    }, handleError);
}

非常感谢任何帮助。

麦克

1 个答案:

答案 0 :(得分:0)

简短版本:

  1. 将client.currentUser的JSON表示存储在localStorage
  2. 当应用程序启动时,将client.currentUser恢复为临时变量。测试mobileServiceAuthenticationToken值以查看它是否已过期。如果有,请丢弃并跳过第3步。
  3. 将temp变量分配给client.currentUser
  4. 如果您在client.currentUser中没有有效令牌,请调用client.login('google'),然后存储在localStorage中(步骤1阅读)
  5. 您可以对/.auth/me的输出执行相同的操作 - 只有在您还没有它时才能读取它。您只需在令牌更改时阅读/.auth/me。