我使用的是MVC 5
的脚手架代码,该代码生成login
方法。我遵循了来自…的官方教程。。。
创建一个安全的ASP.NET MVC 5 web应用程序,包括登录、电子邮件确认和密码重置(C#)
添加额外的功能,确保在用户登录系统之前确认电子邮件。
以下是我在控制器中的代码:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var currentUser = UserManager.FindByNameAsync(model.Email);
if (currentUser != null)
{
if (!await UserManager.IsEmailConfirmedAsync(currentUser.Id))
{
ViewBag.errorMessage = "You must have a confirmed email to log on.";
return View("Error");
}
}
// Other scaffolded implementations
}
但是,Visual Studio会出现一个错误,指出该参数对于方法IsEmailConfirmedAsync
无效。显然,我检查过,currentUser.Id
是int
数据类型,是System.Threading.Task
的id
。如何修复此问题,使我传递的是UserId
而不是任务Id
?
这是因为在您的代码中,currentUser
被分配了从查找用户返回的Task
。
您应该等待该呼叫以获得所需的行为
var currentUser = await UserManager.FindByNameAsync(model.Email);
即使是与OP相关的例子也有
// Require the user to have a confirmed email before they can log on.
var user = await UserManager.FindByNameAsync(model.Email);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
ViewBag.errorMessage = "You must have a confirmed email to log on.";
return View("Error");
}
}