Членство в ASP.NET MVC - неверный регистр имени пользователя - PullRequest
0 голосов
/ 22 июля 2010

Когда пользователь входит в систему с реализацией службы членства по умолчанию в проекте ASP.NET MVC, он регистрируется с именем пользователя в любом регистре, который он использовал при входе в систему.

Например, я создаю пользователя по имени Джон. Если я войду в систему как joHN, то User.Identity.Name будет равно joHN. Я бы хотел, чтобы он совпадал с John, фактическим логином пользователя.

Сейчас я обхожу это так:

var membershipUser = Membership.GetUser(model.UserName);
var membershipUserName = Membership.GetUserNameByEmail(membershipUser .Email);
FormsService.SignIn(membershipUserName, model.RememberMe);

вместо реализации по умолчанию:

FormsService.SignIn(model.UserName, model.RememberMe);

Это кажется немного окольным. Есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 23 июля 2010

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

Если вам необходимо обеспечить чувствительность к регистру, вам нужно будет либо защитить все точки аутентификациикак вы описываете или реализуете собственный принципал / личность.

Я настоятельно рекомендую первое и буду молиться за вас, если вы выберете второе.; -)

Удачи.

1 голос
/ 23 июля 2010

Вы всегда можете просто привести в исполнение свой собственный случай. Например, если это настоящие имена людей (даже если некоторые странные имена), вы можете просто сделать что-то вроде:

 TextInfo culture = new CultureInfo("en-US", false).TextInfo;
  FormsService.SignIn(culture.ToTitleCase(model.UserName), model.RememberMe);

И сделайте это заглавным. Конечно, это не на 100% то, что вы просили, но это может быть лучше, чем ваше текущее решение (так как это сохраняет вызов к базе данных по крайней мере).

...