DotNetOpenAuth - OnLoggedIn不在OpenIdButton上触发

时间:2010-07-14 22:11:05

标签: c# asp.net dotnetopenauth google-apps

我正在尝试为仅使用Google作为身份验证提供程序的网站实施OpenID。我使用OpenIdButton控件将用户发送到他们的Google Apps登录,因为我总是希望他们去同一个地方。

按钮将它们发送到正确的位置并将它们正确地返回到ReturnToUrl,但似乎OnLoggedIn事件似乎没有触发。我通过在方法中设置TextBox值来检查事件,我发现TextBox值没有变化。这是我的代码......

<tr>
  <td>
    <asp:TextBox ID="devMsg" runat="server"/>
  </td>
</tr>
<tr>
  <td valign="top" align="center">
    <font size="-1"><b>Sign in with your</b></font>
    <br />
    <br />
<rp:OpenIdButton ID="OpenIdButton1" runat="server" Text="Login with your Google account!"
             ImageUrl="http://www.google.com/accounts/google_transparent.gif"
                 Identifier="https://www.google.com/accounts/o8/site-xrds?hd=dev.connexcloud.com"
                 ReturnToUrl="http://localhost:1587/OpenIdRelyingPartyWebForms/loginGoogleApps.aspx"
                 OnLoggedIn="OpenIdLogin_LoggedIn" />
    <br />
    <br />
    <font size="-1"><b>Account</b></font>
  </td>
</tr>


protected void OpenIdLogin_LoggedIn(object sender, OpenIdEventArgs e)
{
  this.devMsg.Text = "no response";

  if (e.Response != null)
  {
    devMsg.Text = "response";

    switch (e.Response.Status)
    {
      case AuthenticationStatus.Authenticated:
           this.devMsg.Text = "authenicated";
           break;
      case AuthenticationStatus.Canceled:
           this.devMsg.Text = "canceled";
           break;
      case AuthenticationStatus.Failed:
           this.devMsg.Text = "failed";
           break;
    }
  }
}

TextBox永远不会被设置为任何东西,所以在我看来,当响应从谷歌回来时,从未进行过OpenIdLogin_LoggedIn调用。

1 个答案:

答案 0 :(得分:1)

您是否尝试过在LoggedIn处理程序中设置断点?我怀疑它有效。在调用LoggedIn处理程序之后,控件使用OpenID声明的标识符调用FormsAuthentication.RedirectFromLoginPage,这会在您注意到之前擦除您在其中设置的TextBox。

除了断点之外,您可以测试它的另一种方法是在处理程序中设置e.Cancel = true,这会抑制对FormsAuthentication.RedirectFromLoginPage的后续调用。