2010-07-14 4 views
0

Я пытаюсь реализовать OpenID для веб-сайта, используя только Google в качестве поставщика проверки подлинности. Я использую элемент управления OpenIdButton, чтобы отправлять пользователей в их логин Google Apps, так как я всегда хочу, чтобы они перешли на одно и то же место.DotNetOpenAuth - OnLoggedIn не работает на OpenIdButton

Кнопка отправляет их в нужное место и возвращает их в 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

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

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

+0

Спасибо за вход Andrew. Я попытался установить точку останова, и я также попробовал ваше предложение e.Cancel = true. Обработчик LoggedIn определенно не вызывается. Мне удалось обработать ответ в методе Page_Load, но я бы хотел, чтобы он работал правильно. Проще говоря, это похоже на то, что обработчик OpenIdLogin_LoggedIn даже не существует. Не вызывается, и во время сборки не сообщается об ошибках. – JediPotPie

Смежные вопросы