FormsAuthentication Membership.GetUser () Null - PullRequest
9 голосов
/ 29 января 2010

Я использую проверку подлинности с помощью форм и имею базовую страницу входа и страницу по умолчанию.

Когда я нахожусь на странице входа в систему и звоню в SignOn, это прекрасно работает. Однако, когда я все еще на странице входа в систему, Membership.GetUser() возвращает ноль. Когда я перенаправляю на страницу по умолчанию, Membership.GetUser() возвращает мою информацию о пользователе.

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

Дайте мне знать, если вам нужна дополнительная информация.

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

bool authenticated = User.Identity.IsAuthenticated;
            string username = User.Identity.Name;

            MembershipUser user = Membership.GetUser();

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

Ответы [ 5 ]

13 голосов
/ 08 июня 2010

Что-то еще, чтобы попробовать следующий код:

 MembershipUser user = Membership.GetUser(username);
 GenericIdentity identity = new GenericIdentity(user.UserName);
 RolePrincipal principal = new RolePrincipal(identity);
 System.Threading.Thread.CurrentPrincipal = principal;
 HttpContext.Current.User = principal;
11 голосов
/ 29 января 2010

Это может быть связано с тем, что вы разрешаете анонимных пользователей на вашей странице входа в систему. Поэтому браузер не отправляет на эту страницу больше информации, чем необходимо.

2 голосов
/ 27 февраля 2013

У меня была похожая проблема, и проблема оказалась в том, что мне не хватало метода аутентификации = форма в веб-конфигурации.

<system.web>
    <authentication mode="Forms"/>
    ....

Не забудьте об этом (я переносил старый устаревший сайт в aspnet)

2 голосов
/ 26 сентября 2012

Я был в такой же ситуации, вот что у меня работало на MVC 4 .NET 4.5.

Membership.GetUser(HttpContext.Current.User.Identity.Name)
0 голосов
/ 04 апреля 2016

У меня была эта проблема, и я обнаружил, что это связано с несколькими поставщиками членства, поэтому вместо

Membership.GetUser()

Вы можете попробовать

Membership.Providers["MyMembershipProvider"].GetUser()

или более конкретно

Membership.Providers["MyMembershipProvider"].GetUser(LoginCtrl.UserName, false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...