如何从Google OpenID提供商处获取电子邮件,性别和用户名

时间:2011-12-20 11:59:53

标签: asp.net openid dotnetopenauth

我使用开放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及其全名和性别信息添加到我的数据库)

我已经编写了以下代码来重新提交来自谷歌的电子邮件。没有什么是retuernd

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

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

2 个答案:

答案 0 :(得分:1)

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

您无法获取Google用户的用户名或性别。你可以得到他们的电子邮件地址,我认为就是这样。 (也许他们的全名)。这取决于个人OpenID提供商,Google和其他大型提供商一样,已经选择向用户提供最少的数据。

答案 1 :(得分:0)

您使用的是DotNetOpenAuth吗?我就是这样做的

编辑:我添加了OpenID Login的代码。基本上,您向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那么写它。