. Membership.GetUser () ИмяПользователь;(.net 4, MVC 3) - PullRequest
2 голосов
/ 26 сентября 2011

Я регистрирую пользователей в .net, используя простую аутентификацию .net:

if ( Membership.ValidateUser( user, passwd ) )

отлично работает. по пятам, я пытаюсь получить имя пользователя:

Membership.GetUser().UserName

иногда это возвращает неверный объект. иногда нет. Кажется, я не могу определить закономерность того, что есть что.

например, пользователь входит в систему с допустимой ролью в системе как «root» / «пароль». вызов ValidateUser () завершается успешно, но Membership.GetUser (). UserName возвращает недопустимый объект. Спустя 2 секунды, повторите то же самое, и валидация, и GetUser () завершатся успешно.

есть идеи?


.. редактировать 1 .. вот как я использую имя пользователя:

Roles.GetRolesForUser( Membership.GetUser().UserName ); 

когда я перехожу в System.Environment.UserName, список ролей возвращается пустым.

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

FormsAuthentication.SetAuthCookie( user, true );

если я использую HttpContext.Current.User.Identity.Name, список ролей подходит для файла cookie auth, установленного в true или false.

Теперь я понимаю проблему производительности. это важно для меня. но мне также нужно убедиться, что приложение работает правильно.

Ответы [ 4 ]

6 голосов
/ 26 сентября 2011

Почему вы не можете использовать

HttpContext.Current.User.Identity.Name

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

Membership.ValidateUser() возвращает true или false, является ли пользователь действительным или нет, но он не регистрирует их.

Membership.ValidateUser Method

Проверяет правильность введенных имени пользователя и пароля.

Попробуйте вместо этого:

bool createPersistentCookie = true; // remember me?

if (Membership.ValidateUser(user, passwd)) {
    FormsAuthentication.SetAuthCookie(user, createPersistentCookie);
    if (FormsAuthentication.GetAuthCookie(user, createPersistentCookie) == null)
        throw new SecurityException("Authentication persistence failed");

    Membership.GetUser().UserName; // should have a value now
}
else
{
    // invalid login
}
1 голос
/ 11 апреля 2013

Я использую методы system.web.security для аутентификации пользователей при использовании методов веб-службы.Я не использую проверку подлинности с помощью cookie в FormsAuthentication.

Мне нужно настроить роли, связанные с методами веб-службы, в файле web.config

  <add name="rule1" url="~/WebService.svc/rest/help" method="*" role="?"/>      
  <add name="rule1" url="~/WebService.svc/rest/Method1" method="*" role="service"/>
  <add name="rule1" url="~/WebService.svc/rest/Method2" method="*" role="service"/>...

Затем выполните следующеекод вызывается каждый раз, когда поступает запрос для проверки подлинности:

Membership.ValidateUser(username, password); //Validates user credential
Roles.IsUserInRole(username, "/WebService.svc/rest/Method2"); //Verifies User is authorised for method in question
0 голосов
/ 26 сентября 2011

Используете ли вы куки для сохранения учетных данных пользователя?Если это так ... Я считаю, что следующие шаги аутентификации должны быть предприняты:

  1. вызов ValidateUser , чтобы проверить правильность учетных данных .. как вы уже делаете
  2. вызов FormsAuthentication.SetAuthCookie для установки файла cookie аутентификации
  3. Response.Redirect ("Некоторыедомашняя страница или другое ");обновит файлы cookie учетных данных и предоставит вам действительный пользовательский объект

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...