Amr*_*rhy 20 asp.net-mvc-4 .net-4.5 simplemembership
WebSecurity.Login 在simplemembership中使用用户名和密码,如何使用用户名或电子邮件而不是用户名?来登录用户,以使用户可以自由输入他的电子邮件或用户名进行登录.
mat*_*tt. 27
你可以继承SimpleMembershipProvider并只是覆盖这样的ValidateUser方法.
public class ExtendedSimpleMembershipProvider : SimpleMembershipProvider
{
public override bool ValidateUser(string login, string password)
{
// check to see if the login passed is an email address
if (IsValidEmail(login))
{
string actualUsername = base.GetUserNameByEmail(login);
return base.ValidateUser(actualUsername, password);
}
else
{
return base.ValidateUser(login, password);
}
}
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一种方法.您可以编写自己的,MembershipProvider但如果您只需要更改ValidateUser方法,这应该可行.
将以下配置添加到web.config以设置提供程序.
<membership defaultProvider="ExtendedSimpleMembershipProvider">
<providers>
<clear/>
<add name="ExtendedSimpleMembershipProvider"
type="MyProject.Web.SimpleMembershipProvider, MyProject.Web"/>
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
这应该让你朝着正确的方向前进.
Sim*_*ver 18
WebSecurity只是FormsAuthentication在引擎盖下打电话.你可以这样做:
if (WebSecurity.UserExists(username))
{
FormsAuthentication.SetAuthCookie(username, false);
}
Run Code Online (Sandbox Code Playgroud)
好奇为什么你需要这个功能.(仅供参考:我的理由是,如果用户在快速结账(购物车)流程中使用PayPal进行了身份验证,我允许他们以相同的用户身份自动登录到我的网站,因为我认为风险非常低不是合适的人).
可能有用:FormsAuthentication和WebSecurity之间的区别
| 归档时间: |
|
| 查看次数: |
29888 次 |
| 最近记录: |