Подтвердить что ты не робот

Кто устанавливает свойство IsAuthenticated объекта HttpContext.User.Identity

Этот код является исходным кодом RTM asp.net mvc

Кто устанавливает свойство IsAuthenticated объекта HttpContext.User.Identity?

   protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
        if (httpContext == null) {
            throw new ArgumentNullException("httpContext");
        }

        IPrincipal user = httpContext.User;
        if (!user.Identity.IsAuthenticated) {
            return false;
        }
    }

Является ли свойство IsAuthenticated заданным вызовом метода (пример проекта asp.net mvc 4.0):

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

Когда я отлаживаю код метода LogOn проекта примера asp.net mvc 4.0 после вызова метода FormsAuth.... Выполнение

User.Identity.IsAuthenticated

все еще возвращает FALSE. Только когда я отлаживаю метод LogOff

User.Identity.IsAuthenticated

говорит TRUE. Итак, кто устанавливает это свойство в ИСТИНА и КОГДА?

UPDATE

Об аутентификации FORMS!

Теперь я отлаживал метод LogOn проекта образца mvc asp.net и после того, как действие LogOn было возвращено, мой метод AuthorizeCore, который я переопределил, вызывается, а свойство IsAuthenticated имеет значение TRUE!

Может ли установка TRUE зависеть от коллекций ModelState.Value.Error?

Если count == 0 в сборках ошибок IsAuthenticated имеет значение TRUE else IsAuthenticated - FALSE

Можете ли вы подтвердить это?

4b9b3361

Ответ 1

Это свойство устанавливается модулем проверки подлинности форм, считывая и анализируя cookie файлы cookie форм из запроса. Я поставил запрос жирным шрифтом, потому что я подозреваю, что причина, по которой вы наблюдаете это поведение. Позволь мне объяснить. Когда вы вызываете FormsAuthentication.SetAuthCookie после успешной проверки подлинности, вы добавляете cookie аутентификации в ответ. Этот файл cookie будет храниться в клиентском браузере и будет отправлен на последующих запросах. Таким образом, только при последующих запросах пользователь будет считаться аутентифицированным. Поэтому вам нужно всегда перенаправлять после вызова метода SetAuthCookie. Внутри запроса, вызвавшего этот метод, вы уже знаете, предоставили ли пользователю правильные учетные данные, поэтому вам не нужно проверять свойство IsAuthenticated.

Ответ 2

Происхождение свойства зависит от типа Identity. Для a FormsIdentity свойство просто возвращает true:

/// <devdoc>
///    Indicates whether or not authentication took
///    place.
/// </devdoc> 
public  bool                         IsAuthenticated { get { return true;}}

Это имеет смысл, потому что код в FormsAuthenticationModule.cs присваивает только FormsIdentity после аутентификации. Код кажется довольно сложным, я вижу, что он извлекает билет из файла cookie, но я не могу найти, где он проверяет билет.