如何在Azure移动Web应用程序中获取基本用户信息
本文关键字:获取 用户 信息 应用程序 Azure 移动 Web | 更新日期: 2023-09-27 18:19:26
我有一个Xamarin.Forms应用程序,我想基于FaceBook和Azure实现它的身份验证功能。身份验证本身是有效的,但我还没有找到从中获取基本用户信息的方法(姓名、电子邮件…)
var user = await DependencyService.Get<IMobileClient>()
.LoginAsync(MobileServiceAuthenticationProvider.Facebook);
在服务器端
var mobileAppUser = (MobileAppUser)User;
var facebookCredentials =
user.GetIdentityAsync<FacebookCredentials>().Result;
mobileAppUser存在,但facebookCredentials始终为null。
我在Azure上的后端是一个用.net编写的新移动web应用程序。除了这个身份验证问题,它的所有功能都很好。我找不到在服务器端或客户端解决此问题的正确方法。请。注意,我的问题是关于Azure移动应用程序的新方式,而不是旧的经典方式。
你能帮我吗?欢迎任何示例代码或文档。
提前感谢!
注释太长
如果您查看GetIdentityAsync
的实现,您将看到以下内容:
- 它检查用户是否经过身份验证(您说过用户经过身份验证,所以这里没有问题)
- 从配置中读取
"EMA_RuntimeUrl"
(它不是null,因为这样会得到一个异常) - 它检查来自提供者的令牌是否有效。如果没有,则返回
null
我相信这就是你遇到的问题。快速搜索一下这个问题,你就会发现这个SO问题。
那么,您是否在应用程序属性的azure门户中的移动应用程序中手动创建了EMA_RuntimeUrl,并将其分配给网关地址?
使用异步调用,您应该等待操作完成,完成后结果将可用。你可以通过多种方式做到这一点,但在这种情况下,最自然的是:
var facebookCredentials = await user.GetIdentityAsync<FacebookCredentials>();
// Here you can use your facebookCredentials variable:
好吧,我不知道这真的有帮助吗,但我会试试的。据我所知,你使用的是asp.net身份和facebook中间件。我也使用这个,但使用谷歌oauth中间件而不是facebook。如果我是对的,这应该是的解决方案
如果是这样,当您使用中间件进行身份验证请求时,您指定了回调url,在与您的提供商(facebook)成功进行身份验证过程后,您将重定向该url。要请求外部身份验证,请使用指定的url调用ChallangeResult
。当您到达此回调时,可以使用IAuhtnticationManager
接口中的GetExternalLoginInfoAsync()
方法作为回调方法的第一步。要获得IAuthenticationManager
实例,可以读取HttpContext.GetOwinContext().Authentication
属性。之后,您可以获得关于用户的所有必要信息作为IIdentity
实现-GetExternalLoginInfoAsync()
返回ExternalIdentity
实例
希望对有所帮助