Проверка подлинности с помощью ASP.NET Forms выполняется на локальном сервере, но не на веб-сервере. - PullRequest
0 голосов
/ 12 сентября 2010

Я реализую Forms Authentication в ASP.NET с C # (v3.5).

Я создал простую форму входа, когда электронная почта и пароли пользователей хранятся в моей базе данных SQL.

Когда я захожу на свой локальный хост, все работает нормально, но когда я опубликовал проект и загрузил его на свой производственный веб-сервер, все стало немного странным для меня.

Переменная HttpContentxt.Current.User.Identity.IsAuthenticated возвращает false, даже если вход был успешным (и опять же, в localhost все работает нормально).

Это следующий код нажатия кнопки входа в систему (я использую свой собственный DataAccess, игнорирую его неактуальный код):

    protected void btnLogin_Click(object sender, EventArgs e)
    {
        Page.Validate("Login");
        if (Page.IsValid)
        {
            string email = txtEmail.Text;
            string passwd = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "MD5");
            WebFactory.DataAccess.Users.Data userData = new WebFactory.DataAccess.Users.Data(ConnectionString);
            userData.Load(new WebFactory.DataAccess.Users.Item[] {
                new WebFactory.DataAccess.Users.Item(WebFactory.DataAccess.Users.Columns.Email, email),
                new WebFactory.DataAccess.Users.Item(WebFactory.DataAccess.Users.Columns.Password, passwd)
            });
            if (userData.HasData) // Login Success
            {
                if (!cbRememberMe.Checked)
                {
                    FormsAuthentication.SetAuthCookie(userData.Id.ToString(), false);
                }
                else
                {
                    FormsAuthentication.Initialize();
                    DateTime expires = DateTime.Now.AddDays(20);
                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                        userData.Id.ToString(),
                        DateTime.Now,
                        expires,
                        true,
                        String.Empty,
                        FormsAuthentication.FormsCookiePath);

                    string encryptedTicket = FormsAuthentication.Encrypt(ticket);
                    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                    authCookie.Expires = expires;
                    Response.Cookies.Add(authCookie);
                }
                lblStatus.Text = "";
                if (Common.QS.HasRefUrl)
                {
                    Response.Redirect(Common.QS.RefUrl);
                }
                else
                {
                    Common.UserTools.RedirectLoggedInUser(userData.Id);
                }
            }
            else // Login failed
            {
                lblStatus.Text = "Email or password is wrong. please try again."
            }
        }
    }

Спасибо всем помощникам и извините за английские ошибки.

Ответы [ 2 ]

5 голосов
/ 12 сентября 2010

Спасибо всем, я решил проблему.

Мне просто нужно было ввести атрибут name в предложении <forms>, и теперь все работает отлично.

Еще раз спасибо!

2 голосов
/ 12 сентября 2010

Попробуйте проверить конфигурацию проверки подлинности с помощью форм в файле web.config. В частности, переменные домена и пути. Домен должен совпадать с доменом вашего сайта, а путь должен совпадать с именем папки приложения. Вы, вероятно, не будете иметь один из них, поэтому просто установите его на "/"

Вы также можете настроить трассировку, чтобы убедиться, что файл cookie действительно читается приложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...