Почему Web Security работает по-разному в разных браузерах:
Детали:
У меня есть два приложения
Один из них - это простое приложение HTML
, а другое - приложение ASP.NET MVC4 WebApi
, а проекты находятся внутри одного и того же решения, и я установил несколько стартовых проектов для запуска приложения за одно и то же время.
Рабочая версия:
Я использовал Web Security в проекте Web API. Я полностью выполнил веб-безопасность...
Код действия для входа
// GET api/company
[System.Web.Http.AcceptVerbs("Post")]
[System.Web.Http.HttpPost]
public HttpResponseMessage Login(LoginRequest loginRequest)
{
try
{
if (WebSecurity.Login(loginRequest.EmailAddress, loginRequest.Password, true))
{
var userDetails = new string[2];
userDetails[0] = loginRequest.EmailAddress;
var currentUSerRole = Roles.GetRolesForUser(loginRequest.EmailAddress);
userDetails[1] = currentUSerRole[0].ToString();
HttpResponseMessage response =
Request.CreateResponse(HttpStatusCode.Accepted, userDetails);
return response;
}
else
{
HttpResponseMessage response
= Request.CreateResponse(HttpStatusCode.Unauthorized);
return response;
}
}
catch (Exception e)
{
HttpResponseMessage response
= Request.CreateResponse(HttpStatusCode.Unauthorized);
return response;
}
}
*WebSecurity.Login*
работает во всех браузерах, когда я вызываю метод входа, используя Ajax
.
Но у меня есть другой метод в другом контроллере, который называется CurrentDateAndUser
Код:
[AllowAnonymous]
[System.Web.Http.AcceptVerbs("Get")]
[System.Web.Http.HttpGet]
public HttpResponseMessage CurrentDateAndUser()
{
if (WebSecurity.IsAuthenticated)
{
int userId = WebSecurity.CurrentUserId;
string[] currentDateAndUSerId = new string[2];
currentDateAndUSerId[0] = userId.ToString();
currentDateAndUSerId[1] = DateTime.UtcNow.ToString();
HttpResponseMessage response =
Request.CreateResponse(HttpStatusCode.Accepted, currentDateAndUSerId);
return response;
}
HttpResponseMessage responseNew =
Request.CreateResponse(HttpStatusCode.NotAcceptable);
return responseNew;
}
Проблема:
- Если я вызываю метод
CurrentDateAndUser
из Microsoft Internet Explorer. Используя вызов Ajax, все работает.WebSecurity.IsAuthenticated
возвращает true и работает хорошо.
Однако
- Если я вызываю метод
CurrentDateAndUser
из Google Chrome или Mozilla Firefox с помощью вызова Ajax, то ничего не работает.WebSecurity.IsAuthenticated
всегда возвращает false.
Я не знаю почему. Если у вас есть идеи, пожалуйста, дайте мне знать.
Я также нашел аналогичную проблему (не уверен, что это реальная проблема):
Когда я запускаю свое приложение с помощью Fiddler, я вижу другой результат:
Когда я вызываю метод CurrentDateAndUser
из IE, запрос:
Я вижу значения Cooke/Login в изображении выше
Но когда я вызываю метод CurrentDateAndUser
из Chrome и Firefox, запрос:
Я не вижу значения cookie, что означает, что свойство Web Security.IsAuthenticated
возвращает false
.
Это ошибка в WebSecurity
?????
Изменить
Мой код запроса Ajax
function GetCurrentUserId() {
return $.ajax({
method: 'GET',
url: rootUrl + '/api/Common/CurrentDateAndUser',
async: false
}).success(function (response) {
return response[0];
}).error(function () {
toastr.error('Somthing is wrong', 'Error');
})
}
Этот запрос не отправляет значения Cookie Auth методу Web API при запуске приложения в Chrome и Firefox, однако этот запрос отправляет значения cookie методу API, если он запущен в IE
Я разместил изображение, пожалуйста, взгляните на изображение выше.