Аутентификация с помощью ASP.NET Forms с помощью Windows Safari - PullRequest
3 голосов
/ 07 октября 2009

Кто-нибудь знает, почему ASP.NET Forms Authentication не работает в Windows Safari, или еще лучше, как заставить его работать?Это кажется очень странной проблемой.Когда я использую элемент управления входом в систему (System.Web.UI.WebControls.Login), все работает нормально, но если я пытаюсь выполнить настраиваемый вход с проверкой подлинности с помощью форм при вызове FormsAuthentication.RedirectFromLoginPage, сафари просто возвращает меня на страницу входа, как будтоЯ не авторизован, в то время как любой другой браузер входит в систему и отправляет меня в путь.

protected void lnkLogin_Click(object sender, EventArgs e)
{
    if (Membership.Provider.ValidateUser(txtUsername.Text, txtPassword.Text))
    {
        Session.Clear();
        HttpContext.Current.Response.Cookies.Clear();
        FormsAuthentication.SetAuthCookie(txtUsername.Text, true);
        FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, true);
    }
}

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Попробуйте либо SetAuthCookie, либо RedirectFromLoginPage. Перенаправление должно знать, куда перенаправить в любом случае (ReturnUrl), возможно, это ваша проблема.

    if (Request.QueryString["ReturnUrl"] != null) 
    { 
        FormsAuthentication.RedirectFromLoginPage("someuserid", false); 
    } 
    else 
    { 
        FormsAuthentication.SetAuthCookie("someuserid", false); 
        Response.Redirect("~/SomePage.aspx"); 
    } 
0 голосов
/ 08 октября 2009

У меня в Safari это отлично работает:

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        //check login
        User user = UserBAL.GetUser(Login1.UserName, Login1.Password);

        //null and filled object check
        if (user != null && user.Id > 0 && user.Roles != null && user.Roles.Count > 0)
        {

            e.Authenticated = true;

            FormsAuthenticationTicket authTicket = new
            FormsAuthenticationTicket(1,                          //version
                                     Login1.UserName,           // user   name
                                     DateTime.Now,               // creation
                                     DateTime.Now.AddMinutes(60),//  Expiration
                                     false,                      // Persistent
                                     string.Join("|", user.Roles.ToArray())); // User ata


            // Now encrypt the ticket.
            string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
            // Create a cookie and add the encrypted ticket to the
            // cookie as data.
            HttpCookie authCookie =
                         new HttpCookie(FormsAuthentication.FormsCookieName,
                                        encryptedTicket);

            Response.Cookies.Add(authCookie);

            //redirect 
            Response.Redirect(FormsAuthentication.GetRedirectUrl(
                                           Login1.UserName,
                                           false));

        }
        else
        {

            Login1.FailureText = "Login failed.";
        }

    }
...