Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在OAuth登录后获取用户ID_C#_Asp.net_Asp.net Mvc 4_Oauth - Fatal编程技术网

C# 在OAuth登录后获取用户ID

C# 在OAuth登录后获取用户ID,c#,asp.net,asp.net-mvc-4,oauth,C#,Asp.net,Asp.net Mvc 4,Oauth,我正在尝试将OAuth注册/登录集成到我的ASP.NETMVC4站点中。但我在登录后获取用户ID和/或用户名时遇到问题。登录时,我有: AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl })); if(result.IsSuccessful) { if(OAuthWebSec

我正在尝试将OAuth注册/登录集成到我的ASP.NETMVC4站点中。但我在登录后获取用户ID和/或用户名时遇到问题。登录时,我有:

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

if(result.IsSuccessful)
{
    if(OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
    {
        string username = User.Identity.Name;
        int userID = WebSecurity.CurrentUserId;
    }
}
虽然OAuthWebSecurity.Login成功(返回true),但username设置为空字符串,userID设置为-1(这意味着没有人登录)。有人能解释一下登录函数返回true与确定当前用户的这两种方法之间的差异吗?或者在OAuth登录后,给我展示一种查找用户ID(对应于UserProfile表)的方法


此登录结构主要来自启动MVC 4 internet应用程序时提供的默认成员代码。

我相信这取决于您使用的身份提供程序。可以按如下方式检索标识提供程序发送的用户名属性和特定密钥:

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

string username = result.UserName;
string name = result.ExtraData["name"];
您需要将身份提供者发送回您的数据库的数据(可能是电话号码、姓名等)存储在数据库中,这也是生成您的用户ID的地方。更多信息(以及开始设置指南)可在此处找到:


太好了,谢谢。关于类似的话题,你知道在谷歌认证后如何访问用户的电子邮件地址吗?(谷歌告诉你该网站可以访问你的电子邮件)@Jordan我还没有尝试过,但其他答案表明以下可能适用于谷歌:email=result.ExtraData[“email”];发生这种情况的原因是,您试图以登录的相同操作访问用户信息。用户信息将出现在下一个操作中,但不会出现在本操作中。注销时也会发生同样的情况。我不知道为什么它会这样工作。