目前,为了能够获取有关已登录用户的更多信息,您需要再次调用该服务以检索用户信息。您实际上不需要要求额外的登录范围(您提到的帖子的主题)来检索用户名,因为默认情况下所有提供者都会提供该用户名。
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 有一个开放的功能请求来改进它。