Проблема с контролем входа - PullRequest
1 голос
/ 12 июля 2011
<asp:Login ID="Login1" runat="server" 
        FailureText="חיבורך לא הייה מוצלח. אנא נסה שנית" LoginButtonText="התחבר" 
        PasswordLabelText="סיסמה:" PasswordRequiredErrorMessage="יש צורך בסיסמה" 
        RememberMeText="זכור אותי פעם הבאה" TitleText="" UserNameLabelText="שם משתמש:" 
        UserNameRequiredErrorMessage="יש צורך בשם משתמש" Height="100px" 
        DestinationPageUrl="~/AllQuestions.aspx" PasswordRecoveryText="שכחת סיסמה" 
        PasswordRecoveryUrl="~/RetrievePassword.aspx" RememberMeSet="True" 
        onauthenticate="Login1_Authenticate">

    <CheckBoxStyle Height="50px" />
    <ValidatorTextStyle BorderColor="#CC0000" />
</asp:Login>

Элемент управления работает только без этой части: onauthenticate="Login1_Authenticate" с этой частью, он не позволит мне войти в систему !!!

Я не знаю почему, хотя: (

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{

    if (UsefulStaticMethods.CheckIfUserISbanned(Login1.UserName))
    {
        Server.Transfer("~/Banned.aspx");
    }
}

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Вам необходимо установить флаг Authenticated. MSDN AuthenticateEventArgs

Заверенная:

Получает или задает значение, указывающее, была ли успешной попытка аутентификации пользователя.

Вам необходимо добавить код:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e){
    if (UsefulStaticMethods.CheckIfUserISbanned(Login1.UserName)) {
        e.Authenticated = false;
        Server.Transfer("~/Banned.aspx");
    }else{
       //authenticate...
       e.Authenticated = true;
    }
}
0 голосов
/ 12 июля 2011

Если вы добавляете подписчика в обработчик событий OnAuthenticate, элемент управления Login обходит свою собственную аутентификацию и передает полный контроль подписчику.Теперь вам нужно самостоятельно выполнить аутентификацию (что довольно просто, как показано ниже)

Если вы отразите на Login.OnAuthenticate, это выглядит так:

namespace System.Web.UI.WebControls
{
    public class Login : CompositeControl
    {
        // other code omitted

        protected virtual void OnAuthenticate(AuthenticateEventArgs e)
        {
            AuthenticateEventHandler handler = this.Authenticate;

            if (handler != null)
                handler(this, e);
            else
                this.AuthenticateUsingMembershipProvider(e);
        }

        private void AuthenticateUsingMembershipProvider(AuthenticateEventArgs e)
        {
            var provider = LoginUtil.GetProvider(this.MembershipProvider);
            e.Authenticated = provider.ValidateUser(
                    this.UserNameInternal, this.PasswordInternal);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...