ali*_*izx 14 asp.net-mvc asp.net-identity
在microsoft Identity 2中有能力用户可以确认我在这个项目中从这里下载了Identity 2示例项目的电子邮件地址没有任何区别用户确认了他们的电子邮件和谁没有我想要的人如何不确认他们的电子邮件无法登录这是我试过的:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
switch (result)
{
case SignInStatus.Success:
{
var user = await UserManager.FindByNameAsync(model.Email);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
//first I tried this.
//return LogOff();
HttpContext.Server.TransferRequest("~/Account/LogOff");
return RedirectToAction("Login");
}
}
return RedirectToLocal(returnUrl);
}
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
Run Code Online (Sandbox Code Playgroud)
我试图通过调用LogOff()操作方法强制用户注销,但它没有工作,用户保持身份验证.然后我尝试使用Server.TransferRequest()但我不知道为什么它完成了这项工作,但它将用户重定向到使用returnUrl的登录页面="帐户/注销"所以在他们确认他们的电子邮件并尝试登录他们得到注销后我真的很困惑!这是我的LogOff()动作方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
return RedirectToAction("About", "Home");
}
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了几天没有运气!!!!
INF*_*_18 34
也许它有点晚了,但我希望它可以帮助别人.
加上这个
var userid = UserManager.FindByEmail(model.Email).Id;
if (!UserManager.IsEmailConfirmed(userid))
{
return View("EmailNotConfirmed");
}
Run Code Online (Sandbox Code Playgroud)
之前
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
Run Code Online (Sandbox Code Playgroud)
第一个代码块只是检查模型中的电子邮件是否存在于数据库中并获取它的id以检查它是否未被确认,如果是,则返回给用户的视图,如果确认,则只允许用户签名在.
并删除对结果开关的更改,如下所示
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
为什么不完成这个并重定向到正确的操作/视图,而不是移动到另一个页面:
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
return RedirectToAction("ConfirmEmailAddress", new { ReturnUrl = returnUrl });
}
Run Code Online (Sandbox Code Playgroud)
您确实需要一个带有名称的动作(可能还有一个视图)ConfirmEmailAddress.
| 归档时间: |
|
| 查看次数: |
13251 次 |
| 最近记录: |