ASP.NET MVC2 главная страница и аутентификация - PullRequest
2 голосов
/ 12 сентября 2010

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

У меня есть строго типизированная главная страница, которая содержит информацию, основанную на идентификаторе пользователя, прошедшего аутентификацию в настоящее время:

(Guid)Membership.GetUser().ProviderUserKey

Любое другое обычное действие / представление требует аутентификации пользователя.до его просмотра, что означает, что информация о пользователе гарантированно будет доступна.

Проблема в том, что я получаю исключения с нулевой ссылкой, только когда пытаюсь получить доступ к информации пользователя.с главной страницы сайта.Я предполагаю, что это потому, что нет такой вещи, как атрибут [Authorize], который применяется к главным страницам.

Я ошибаюсь?Есть ли другая возможная причина?

Простой пример:

На всех страницах моего сайта используется объект модели представления, который наследует модель представления главной страницы:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<Models.MasterViewModel>" %>

прошедший проверку подлинностиПользовательский объект является свойством этой модели базового представления.Все страницы требуют аутентификации, поэтому любой, кто не работает, перенаправляется в представление входа в систему, которое работает безупречно.Таким образом, простая попытка использовать свойство пользователя в представлении выглядит так:

<%= Model.UserName %>

, который я добавлю в одно из представлений, а также в главное представление сайта.

Когда пользователь уже прошел аутентификацию, все работает так, как должно, с именем пользователя, напечатанным дважды на странице.Когда срок действия авторизационного билета истек или новый пользователь пришел, однако, страница не будет перенаправлена ​​на вход в систему, а вместо этого сгенерирует исключение, которое жалуется на нулевую ссылку, исходящую из <% = Model.UserName%> в главном представлении.

Когда я удаляю <% = Model.UserName%> из основного представления и оставляю его в обычном представлении, он перенаправляется как следует, не выдавая ошибку.

Iнадеюсь, что это несколько яснее.

Редактировать:

Может быть, кто-то мог бы предложить лучший способ доступа к информации аутентифицированного пользователя на главной странице?

Редактировать # 2:

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

Обновление:

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

Ответы [ 3 ]

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

Это не из-за главной страницы.

Membership.GetUser() вернет текущего пользователя, вошедшего в систему.Если ни один пользователь не вошел в систему, он вернет значение null, и это является причиной вашей проблемы.

Вы можете использовать оператор if на главной странице, чтобы проверить, вошел ли пользователь в систему или нет, прежде чем использовать какую-либо информацию о пользователе.

if(Membership.GetUser() != null )
{
    // Use User Info.
}
1 голос
/ 22 сентября 2010

Единственный способ воспроизвести эту ошибку - это добавить нарушающий кодовый блок на главную страницу, на которую ссылаются страницы, не требующие авторизации, а затем посмотреть на них без входа.

Если вашmasterpage не используется на вашей странице входа, это может указывать на то, что что-то еще не совсем на месте.Как настроены ваша маршрутизация и аутентификация?Если ваш вид создается перед перенаправлением, то будет и ваша главная страница, которая может спровоцировать такое поведение.

0 голосов
/ 20 сентября 2010

не уверен, применимо ли это в mvc2, но вы пытались определить атрибут loginUrl в вашем файле web.config?

<authentication mode="Forms"> 
 <forms loginUrl="/user/login" />
</authentication>

<authorization>
 <deny users="?" />
</authorization>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...