【问题标题】:How to get email, gender and username from Google OpenID Provider如何从 Google OpenID Provider 获取电子邮件、性别和用户名
【发布时间】:2011-12-20 11:59:52
【问题描述】:

我已经使用以下代码使用开放 ID 制作了登录系统

<rp:OpenIdLogin runat="server" Identifier="https://www.google.com/accounts/o8/id"   Visible="true" 
        ExampleUrl="" LabelText=" " RegisterText="Register"    ExamplePrefix=" " ID="OpenIdLogin1"  
        OnLoggedIn="OpenIdTextBox1_LoggedIn" RequestEmail="Require" RequestPostalCode="Request"></rp:OpenIdLogin>                     

将用户带到 Google 进行身份验证我只想将电子邮件 ID 和他的全名和性别等用户信息发送到我的数据库

我已经编写了以下代码来从谷歌接收电子邮件,但没有什么是返回

Imports System
Imports DotNetOpenAuth.OpenId.Extensions.AttributeExchange
Partial Class Food
Inherits System.Web.UI.Page


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If (Session("FetchResponse") Is Nothing) Then
            Return
        End If
        Dim fetchResponse As FetchResponse = CType(Session("FetchResponse"), FetchResponse)
        Email = fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email)
    End Sub

    Public Property Email() As String
        Get

        End Get
        Set(ByVal value As String)

        End Set
    End Property
End Class

更新

我使用 loginame 来显示经过身份验证的用户名,但它显示 像这样 https://www.google.com/accounts/o8/id?id=AItOawmQoYAeHRxYW0ZOcQ5VODMPWJQgPOAYkTs

如何显示实际的电子邮件或用户名

【问题讨论】:

标签: asp.net openid dotnetopenauth


【解决方案1】:

请参阅重复的问题How to get email from Google OpenID Provider (in VB) 以获取答案,并附上:

您无法获取 Google 用户的用户名或性别。你可以得到他们的电子邮件地址,我想就是这样。 (也许他们的全名也是如此)。这取决于各个 OpenID 提供者,并且与其他大型提供者一样,Google 已选择提供有关用户的最少数据。

【讨论】:

【解决方案2】:

您在使用 DotNetOpenAuth 吗?这是我的做法

编辑:我添加了用于 OpenID 登录的代码。基本上,您向 OpenID 提供程序发出请求并从您的请求中获得响应。如果请求成功,您应该有一些关于您的用户的信息,但请记住,不同的 OpenID 提供商会提供不同的关于您的用户的信息,即使您请求了某些参数,它们也可能不存在。我的代码来自 ASP.NET MVC 应用程序

public ActionResult OpenIDLogin(string loginIdentifier)
{
    var openid = new OpenIdRelyingParty();
    var response = openid.GetResponse();

    // If there is a response from the specified OpenID identifier we parse it and check it's status
    if (response != null)
    {
        //check the response status
        switch (response.Status)
        {
            case AuthenticationStatus.Authenticated:

                var extensions = response.GetExtension<ClaimsResponse>();
                var user = new User
                        {
                            extensions.FullName, 
                            extensions.Nickname, 
                            extensions.Email,
                            response.ClaimedIdentifier
                        };

                return View();

            case AuthenticationStatus.Canceled:
                // TODO

            case AuthenticationStatus.Failed:
                // TODO
        }
    }
    else
    {
        // If there isn't a response then we need to create the request and add desired extensions
        var request = openid.CreateRequest(loginIdentifier);

        request.AddExtension
            (
                new ClaimsRequest()
                {
                    FullName = DemandLevel.Require,
                    Nickname = DemandLevel.Require,
                    Email = DemandLevel.Require,
                    Gender = DemandLevel.Require
                }
            );

        return request.RedirectingResponse.AsActionResult();
    }

    return RedirectToAction("Index", "Home");
}

该方法被调用两次;一次是在第一次发出请求时,它属于“else”语句,第二次是在响应返回并进入“if”语句时,创建用户。希望这会有所帮助,很抱歉它是用 C# 编写的,但我不太了解 VB 来编写它。

【讨论】:

  • 你能告诉我openid的完整过程吗,我会非常感谢你,因为我已经为此工作了很多天,但没有成功
  • 不,不,亲爱的,我不使用 MVC,我正在使用 asp.net 网络表单,请告诉我网络表单的完整解决方案,我只想在我的网页上显示用户的电子邮件地址
  • 我也差不多,只是不要在“Action”中使用此代码,而是在“Page_Load”方法中使用它并引用您的页面元素。
  • 我只想检索用户的电子邮件和全名,并在页面上显示,否则请只解决我遇到的这个问题
  • 看起来您使用的是 DotNetOpenAuth 的第 3 版,并且与我使用它时有所不同。也许这个问题可以帮助你stackoverflow.com/questions/887748/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多