Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openid DotNetOpenAuth获取电子邮件和重定向问题_Openid_Dotnetopenauth - Fatal编程技术网

Openid DotNetOpenAuth获取电子邮件和重定向问题

Openid DotNetOpenAuth获取电子邮件和重定向问题,openid,dotnetopenauth,Openid,Dotnetopenauth,我正在尝试使用OpenIDajax文本框设置DotNetOpenAuth,但我有两个问题 我希望能够获得用户的电子邮件地址,我认为这是在loggedin事件中完成的(对吗?),但该事件从未被调用,我曾尝试在那里设置断点,但我从未到达 当我在openid文本框(比如Gmail)中输入openid提供者时,我会在文本框中获得登录按钮,因此我点击它会弹出一个新的窗口并显示Gmail登录表单,但之后我输入用户名和密码并点击登录,弹出窗口刷新并在弹出窗口中加载我自己的网站,我希望在我登录后弹出窗口会关闭,

我正在尝试使用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的一个解决方案。。。