Asp.net mvc ASP.NET MVC成员资格-使用了错误的用户名

Asp.net mvc ASP.NET MVC成员资格-使用了错误的用户名,asp.net-mvc,asp.net-membership,Asp.net Mvc,Asp.net Membership,当用户使用ASP.NET MVC项目中的成员资格服务的默认实现登录时,他们将使用用户名登录,无论登录时使用何种情况 例如,我创建了一个名为John的用户。如果我随后以joHN身份登录,则User.Identity.Name将等于joHN。我希望它等于John,实际用户的登录名 目前,我正在这样处理这个问题: var membershipUser = Membership.GetUser(model.UserName); var membershipUserName = Membership.Ge

当用户使用ASP.NET MVC项目中的成员资格服务的默认实现登录时,他们将使用用户名登录,无论登录时使用何种情况

例如,我创建了一个名为John的用户。如果我随后以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);

这似乎有点迂回。有更好的方法吗?

用户名在整个提供程序堆栈中不区分大小写,主体设置为用于身份验证的任何值

如果需要强制区分大小写,则需要在描述时保护所有身份验证点,或者实现自定义主体/标识

我强烈推荐第一种,如果你选择第二种,我会为你祈祷


祝你好运。

用户名在整个提供程序堆栈中不区分大小写,主体设置为用于身份验证的任何值

如果需要强制区分大小写,则需要在描述时保护所有身份验证点,或者实现自定义主体/标识

我强烈推荐第一种,如果你选择第二种,我会为你祈祷


祝你好运。

你可以一直坚持自己的观点。比如,如果这些是人们的真名(即使是一些奇怪的名字),你可以这样做:

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

把它做成书名。当然,这并不是您要求的100%,但它可能比您当前的解决方案更好(因为这样至少可以节省对数据库的调用)。

您可以始终执行自己的案例。比如,如果这些是人们的真名(即使是一些奇怪的名字),你可以这样做:

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

把它做成书名。当然,这不是您要求的100%,但它可能比您当前的解决方案更好(因为这样至少可以保存对数据库的调用)。

以用户输入的方式显示登录名有什么问题?用户名稍后会在区分大小写的系统中使用。因此,当它看到joHN时,它没有意识到它与joHN是同一个用户。以用户输入的方式显示登录名有什么问题?该用户名稍后会在区分大小写的系统中使用。因此,当它看到joHN时,它没有意识到它是与joHN相同的用户。为它祈祷似乎有点极端,现在快到周末了-别忘了放松,伙计:)不可能,我会选择后者!谢谢。为它祈祷似乎有点极端,快到周末了——别忘了放松,伙计:)不可能,我会选择后者!谢谢。ToTitleCase,有趣-我不知道那个方法。ToTitleCase,有趣-我不知道那个方法。