Openid DotNetOpenAuth获取电子邮件和重定向问题
我正在尝试使用OpenIDajax文本框设置DotNetOpenAuth,但我有两个问题Openid DotNetOpenAuth获取电子邮件和重定向问题,openid,dotnetopenauth,Openid,Dotnetopenauth,我正在尝试使用OpenIDajax文本框设置DotNetOpenAuth,但我有两个问题 我希望能够获得用户的电子邮件地址,我认为这是在loggedin事件中完成的(对吗?),但该事件从未被调用,我曾尝试在那里设置断点,但我从未到达 当我在openid文本框(比如Gmail)中输入openid提供者时,我会在文本框中获得登录按钮,因此我点击它会弹出一个新的窗口并显示Gmail登录表单,但之后我输入用户名和密码并点击登录,弹出窗口刷新并在弹出窗口中加载我自己的网站,我希望在我登录后弹出窗口会关闭,
<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.RelyingParty"
TagPrefix="openid" %>
<openid:OpenIdAjaxTextBox ID="OpenIdAjaxTextBox1" runat="server"
OnLoggingIn="openIdtxtbx_LoggingIn"
OnLoggedIn="openIdtxtbx_LoggedIn"
OnClientAssertionReceived="onauthenticated(sender)"
OnUnconfirmedPositiveAssertion="openIdtxtbx_UnconfirmedPositiveAssertion" />
Protected Sub openIdtxtbx_LoggedIn(ByVal sender As Object, ByVal e As OpenIdEventArgs)
' Do something here
Dim claimedId As String = e.Response.Status
End Sub
Protected Sub openIdtxtbx_LoggingIn(ByVal sender As Object, ByVal e As OpenIdEventArgs)
' Retrieve the email address of the user
Dim c As New ClaimsRequest
c.Email = DemandLevel.Require
e.Request.AddExtension(c)
End Sub
Protected Sub openIdtxtbx_UnconfirmedPositiveAssertion(ByVal sender As Object, ByVal e As OpenIdEventArgs)
' This is where we register extensions that we want to have available in javascript
' on the browser.
OpenIdAjaxTextBox1.RegisterClientScriptExtension(Of ClaimsResponse)("sreg")
End Sub
受保护的子openIdtxtbx_LoggedIn(ByVal发送方作为对象,ByVal e作为OpenIdEventArgs)
“在这里做点什么
Dim claimedId As String=e.Response.Status
端接头
受保护的子openIdtxtbx_日志(ByVal发送方作为对象,ByVal e作为OpenIdEventArgs)
'检索用户的电子邮件地址
Dim c作为新的索赔请求
c、 电子邮件=DemandLevel.Require
e、 请求补遗(c)
端接头
受保护的子openIdtxtbx_UnconfirmedPositiveAssertion(ByVal发送器作为对象,ByVal e作为OpenIDEventTargets)
'这是我们注册扩展的地方,我们希望在javascript中提供这些扩展
'在浏览器上。
OpenIdAjaxTextBox1.RegisterClientScriptExtension(索赔响应)(“sreg”)
端接头
直到网页上的回发(某种类型的提交按钮)后,OpenIdAjaxTextBox.LoggedIn
事件才会触发。文本框上的登录按钮本身不是回发按钮,因此您需要在页面中添加一些其他提交按钮
e.Response.Status
不是声明的标识符。您应该将LoggedIn事件处理程序更改为:
Dim claimedId As String = e.ClaimedIdentifier
使用ClaimsRequest
无法从谷歌获得电子邮件地址,除非您正在使用该行为
已更新:
最后,关于登录结束时弹出窗口不会消失。。。它应该按照你认为应该的方式工作。但是有一个“bug”
OpenIdAjaxTextBox
不支持POST响应,这是由于响应负载的大小而请求属性时得到的。v3.3修复了这一问题,但尚未发布。很抱歉。1。我做了回发,LoggedIn事件按预期触发。关于弹出窗口,我运行了示例,并且我已经能够在那里重现问题。我将ajaxlogin.aspx.cs第14行从Email=DemandLevel.Request改为Email=DemandLevel.Require,所以我只是将DemandLevel改为Require,这导致弹出窗口无法关闭。因此,我做了一些进一步的调试,发现错误是由源代码(v.3.2.2.9257)中的“ReportAuthenticationResult()行1413”中的“未找到对象的实例”引起的。(我尝试过谷歌和雅虎作为openid提供商。)知道我做错了什么吗?顺便说一句,你和openid做得很好安德鲁:)我的网络应用程序启动并运行了,你可以期待捐款。非常感谢你给了我这个复制(和捐款)。今天晚上我的工作一结束,我就去做。好吧,下面是发生的事情(无论如何,在我的盒子上)。。。在v3.2中,OpenIdAjaxTextBox不支持POST OpenID请求或响应。这是在最初编写控件时有意进行的范围限制。当您需要email属性时,Google会提供它,它只会将响应推到GET的有效负载大小的限制之上,因此使用POST,ajax框就会出现故障。好消息是,这已经在预定的v3.3版本中得到了修复(支持POST,耶!)在我的下一篇评论中,这是v3.2的一个解决方案。。。