Пожалуйста, помогите решить проблему с пользовательской аутентификацией
У меня есть простой тип аутентификации, я проверяю в БД, если имя пользователя и пароль существуют, я создаю FormsAuthenticationTicket и добавляю его HttpContext.Current.Response.Cookies.Add(cookie); когда я проверяю HttpContext.Current.User.Identity.IsAuthenticated перед запросом, он возвращает false, но если я проверяю в global.asax Application_AuthenticateRequest(отправитель объекта, EventArgs e) для следующего запроса, HttpContext.Current.User.Identity.IsAuthenticated возвращает true
public static bool Login(string userName, string pass)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
conn.Open();
string comand = string.Format("Select * From ChatUser Where " +
"userName = '{0}' and pass ='{1}'", userName, pass);
SqlCommand cmd = new SqlCommand(comand, conn);
var reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
conn.Close();
return false;
}
while (reader.Read())
{
string id = reader["id"].ToString();
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, id, DateTime.Now, DateTime.Now.AddMinutes(30),
false, null, FormsAuthentication.FormsCookiePath);
string hashCookies = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
HttpContext.Current.Response.Cookies.Add(cookie);
}
conn.Close();
JoinMesage();
return true;
}
catch (Exception ex)
{
//write in log file
return false;
}
}
}
public static void JoinMesage()
{
string userId;
if (HttpContext.Current.User != null)
{
userId = HttpContext.Current.User.Identity.Name;
using (SqlConnection conn = new SqlConnection(connectionString))
{
string comand = string.Format("Insert into Messages (userID,mesageDate,userStatus)"
+ " Value('{0}','{1}','{2}')", userId, DateTime.Now, true);
}
}
}
1 ответ
Пожалуйста, измените ваш билет. так должно быть
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
id,
DateTime.Now,
DateTime.Now.AddMinutes(30),
true,
null,
FormsAuthentication.FormsCookiePath);
и установите тип аутентификации в пользовательском классе идентификации, перейдите по ссылке:
Это решит это.