我使用开放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
如何显示实际的电子邮件或用户名
答案 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那么写它。