c# - 为什么(有时) Membership.ValidateUser 首先调用 PasswordFormat 以及如何?
问题描述
我在MVC
机器上运行项目。我在网络配置中设置了自定义成员资格,例如:
<membership defaultProvider="CustomMembership">
<providers>
<clear/>
<add name="CustomMembership" type="GotPayments.CustomAuthentication.CustomMembership"/>
</providers>
</membership>
我已经实现了一些我需要的功能;对于其他人,我只是抛出了一个NotImplementedException
,因为我不使用它。所以当我打电话给我实现的ValidateUser
用户时,一切正常:
public override bool ValidateUser(string email, string password)
{
if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
{
return false;
}
using (MyProject ctx = new MyProject())
{
var user = (from us in ctx.Users
where string.Compare(email, us.Email, StringComparison.OrdinalIgnoreCase) == 0
&& string.Compare(password, us.Password, StringComparison.OrdinalIgnoreCase) == 0
&& us.IsActive == true
select us).FirstOrDefault();
return (user != null) ? true : false;
}
}
但是,一旦我将项目复制到另一台机器上并运行它,相同的功能(在执行之前;所以 F11 调试时不要进入 to ValidateUser
)调用这个:
public override MembershipPasswordFormat PasswordFormat
{
get
{
throw new NotImplementedException();
}
}
抛出异常。
为什么它只称它为“有时”?以及框架如何称呼它?我自己从不调用那个函数。
堆栈跟踪:
in System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
in System.Environment.get_StackTrace()
in MyProject.CustomAuthentication.CustomMembership.get_PasswordFormat() in CustomMembership.cs:riga 117
in System.Web.Security.Membership.CheckedPasswordFormat(MembershipProviderCollection providers)
in System.Web.Security.Membership.Initialize()
in System.Web.Security.Membership.get_Provider()
in System.Web.Security.Membership.ValidateUser(String username, String password)
in MyProject.Controllers.AccountController.Login(LoginViewModel loginView) in AccountController.cs:riga 27
登录.cs
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel loginView)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(loginView.Email, loginView.Password))
{
// ...
}
}
// ...
}
解决方案
推荐阅读
- c - KEY_ENTER 对 case 语句的 Sensehat 操纵杆输入不起作用
- netty - 网络服务器。是否可以接受 POST/GET 等休息请求
- android - 您的帐户管理员在从我的服务器更新应用程序时对发送某些类型的 android 文件设置了限制
- python - 如何在嵌套记录中查找所有具有子字段的行?PyMongo
- stream - 如何在请求标头并获取 HTTP 错误 403 时使用 youtube-dl 下载 MPEG Dash(mpd 文件)
- laravel - 如何根据 Laravel Nova 上的选择值填充字段?
- php - Laravel 7 样板替代 grafite/scaffold
- rest-assured - mvn serenity:aggregate 运行 0 个测试并且 index.html 有 0 个结果但是 mvn clean verify 工作并获得结果
- python - 在 NumPy 或 Numba 中对大数组进行非常有效的并行排序
- javascript - Node.js 快速发送原始 HTTP 响应