Azure移动服务 - 获取更多用户信息

时间:2014-04-18 19:30:32

标签: javascript node.js azure windows-8.1 azure-mobile-services

我继承了用XAML编写的Windows 8应用程序。所以在C#中我打这个电话

user = await MobileServices.MobileService
                    .LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount);

(这适用于Azure移动服务)

用户对象给我令牌和MicrosoftAccount:..............

为了对人员进行身份验证,我需要能够看到世界卫生组织正在请求访问...

我看下面的文章,但我似乎错过了什么?这篇文章中的javascript是否必须在Node.js中编写?

示例文章 http://blogs.msdn.com/b/carlosfigueira/archive/2013/12/12/expanded-login-scopes-in-azure-mobile-services.aspx

1 个答案:

答案 0 :(得分:1)

目前,为了能够获得有关登录用户的更多信息,您需要再次调用该服务以检索用户信息。您实际上不需要请求其他登录范围(您提到的帖子的主题)来检索用户名,因为默认情况下会为所有提供程序提供。

This post应该具有在服务器端(node.js)编写的代码,以获取有关登录用户的更多信息。 TL; DR版本如下:

在服务器端:添加此自定义API(我将其称为“ userInfo ”;将GET权限设置为“user”,将所有其他权限设置为admin):

exports.get = function(request, response) {
    var user = request.user;
    user.getIdentities({
        success: function(identities) {
            var accessToken = identities.microsoft.accessToken;
            var url = 'https://apis.live.net/v5.0/me/?method=GET&access_token=' + accessToken;
            var requestCallback = function (err, resp, body) {
                if (err || resp.statusCode !== 200) {
                    console.error('Error sending data to the provider: ', err);
                    response.send(statusCodes.INTERNAL_SERVER_ERROR, body);
                } else {
                    try {
                        var userData = JSON.parse(body);
                        response.send(200, userData);
                    } catch (ex) {
                        console.error('Error parsing response from the provider API: ', ex);
                        response.send(statusCodes.INTERNAL_SERVER_ERROR, ex);
                    }
                }
            }
            var req = require('request');
            var reqOptions = {
                uri: url,
                headers: { Accept: "application/json" }
            };
            req(reqOptions, requestCallback);
        }
    });
}

在客户端,成功登录后,调用该API:

user = await MobileServices.MobileService
    .LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount);
var userInfo = await MobileServices.MobileService.InvokeApiAsync(
    "userInfo", HttpMethod.Get, null);

userInfo将包含带有用户信息的JObject。有一项开放式功能请求可以在http://feedback.azure.com/forums/216254-mobile-services/suggestions/5211616-ability-to-intercept-the-login-response更好地完善此功能。