我正在努力解决我不知道如何解决的Xamarin Forms(iOS)/ Azure移动服务/ Facebook问题 . 我想要做的是使用AMS登录Facebook,然后通过自定义控制器将该用户的详细信息保存到服务端数据库 . 我在后端运行Azure移动服务 .
我所拥有的是成功登录Facebook用户的以下代码 .
var fbUser = await DependencyService.Get<IMobileClient>().LoginAsync(MobileServiceAuthenticationProvider.Facebook);
然后我想将fbUser保存到我正在使用所有已配置的ASP.NET标识表的数据库中 . 我想使用此用户访问Facebook用户的 Profiles 信息 . 因此,我有一个后端服务自定义控制器操作,如下所示:
[Route("logintofacebook")]
[AuthorizeLevel(AuthorizationLevel.Anonymous)]
public async Task<IHttpActionResult> LoginToFacebook(MobileServiceUser msUser)
{
try
{
if (msUser != null)
{
var serviceUser = User as ServiceUser;
var identities = await serviceUser.GetIdentitiesAsync();
var result = new JObject();
var fb = identities.OfType<FacebookCredentials>().FirstOrDefault();
if (fb == null)
{
return NotFound();
}
var googleCredentials = identities.OfType<GoogleCredentials>().FirstOrDefault();
var azure = identities.OfType<MicrosoftAccountCredentials>().FirstOrDefault();
var accessToken = fb.AccessToken;
result.Add("facebook",
await GetProviderInfo("https://graph.facebook.com/me?access_token=" + accessToken));
var email = GetUserInfo(result);
var userTypeId = UTypes.Facebook;
在后端进行调试时,MobileServiceUser是一个有效的对象,我可以检查令牌和Facebook用户ID,它们与客户端上创建的一样 . 但是,突出显示的行返回零身份 . 这意味着 fb 变量最终为空 .
问题是,为什么上面的serviceUser变量没有返回任何身份?
以下是使用jwt.io调试时调试的AMS令牌的样子
{
"iss": "urn:microsoft:windows-azure:zumo",
"aud": "urn:microsoft:windows-azure:zumo",
"nbf": 1446872000,
"exp": 1449464000,
"urn:microsoft:credentials": "{\"accessToken\":\"CAAL2gwRM4RYBAKV9Wp0Evjp2aATnm5OIHHc15ujJfeevqCW6DoI36HOQCOYq96xUjZA6VXwovnkBOlY0SkC9nrdwr8jdbF3qJdtK4GAHVk9SGxKVYUZBJ4UwPqQmb5yka93GzL0Fl86m93LnqTffIPJ6vkMfpP0ZAroKzmcJxM1pJ7BAAAA\"}",
"uid": "Facebook:0000000000000000",
"ver": "2"
}
(我用零替换了facebook部分)
谢谢
Ø