1

我正在尝试使用 OpenIdAjaxTextBox 设置 DotNetOpenAuth 但我有两个问题

  1. 我希望能够获取用户的电子邮件地址,我认为这是在登录事件中完成的(对吗?),但该事件从未被调用,我试图在那里设置一个断点,但我从来没有得到它。

  2. 当我在 OpenIdAjaxTextBox(比如说 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
4

1 回答 1

0

OpenIdAjaxTextBox.LoggedIn直到从网页回发(某种提交按钮)才会触发该事件。文本框本身的登录按钮不是回发,因此您需要在页面中添加一些其他提交按钮。

e.Response.Status不是声明的标识符您应该将 LoggedIn 事件处理程序更改为:

Dim claimedId As String = e.ClaimedIdentifier

ClaimsRequest除非您使用AXFetchAsSregTransform行为,否则您不会从 Google 获得电子邮件地址。

更新:最后关于在登录结束时弹出窗口没有消失......它应该按照您认为的方式工作。但是有一个“错误”,即OpenIdAjaxTextBox不支持 POST 响应,由于响应有效负载的大小,当您请求属性时,您会得到这样的结果。v3.3 修复了此问题,但尚未发布。对于那个很抱歉。

于 2009-10-09T16:22:26.603 回答