DotNetOpenAuth - OnLoggedIn не запускает OpenIdButton - PullRequest
0 голосов
/ 15 июля 2010

Я пытаюсь внедрить OpenID для веб-сайта, используя только Google в качестве поставщика аутентификации. Я использую элемент управления 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 никогда не выполняется, когда ответ возвращается от Google.

1 Ответ

1 голос
/ 16 июля 2010

Вы пытались установить точку останова в вашем обработчике LoggedIn? Я подозреваю, что это работает. После вызова обработчика LoggedIn элемент управления вызывает FormsAuthentication.RedirectFromLoginPage с заявленным идентификатором OpenID, что приведет к очистке TextBox, который вы устанавливаете в нем, прежде чем вы заметите его.

Другой способ, кроме точки останова, проверить ее, установив e.Cancel = true в своем обработчике, который подавляет последующий вызов FormsAuthentication.RedirectFromLoginPage.

...