MVC Owin Identity 2 CheckPasswordAsync() 不会执行

Posted

技术标签:

【中文标题】MVC Owin Identity 2 CheckPasswordAsync() 不会执行【英文标题】:MVC Owin Identity 2 CheckPasswordAsync() will not execute 【发布时间】:2017-11-14 16:53:07 【问题描述】:

我有 2 个问题似乎彼此相关,*** 中的其他重复项都没有回答我的问题。

首先PasswordSignInAsync方法执行时它永远不会停止或抛出任何异常它只是继续执行:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

第二我想通过调用一个接收用户名和密码并返回用户信息的网络服务来验证用户,所以我覆盖了checkPasswordAsync方法,但它永远不会被执行:

 public class ApplicationUserManager : UserManager<ApplicationUser>
    
       //...

        public override async Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
        
            return await Task.Run(() =>
            
                return (checkUsernameAndPassword(user.username,password));
            );
        
    //...
    

【问题讨论】:

试试这个:await SignInManager.SignInAsync(model.UserName, true, true); 至少完成了吗? 您是否仔细检查了用户名? ApplicationUser signedUser = UserManager.FindByEmail(model.Email); 然后var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: false); @Codexer SignInAsync 确实完成但没有做任何事情。使用您的第二个解决方案,问题仍然存在。 有趣,试试这个。 var user = await UserManager.FindAsync(model.UserName, model.Password); if (user != null) await SignInAsync(user, model.RememberMe); 【参考方案1】:

试试这个。

ApplicationUser signedUser = UserManager.FindByEmail(model.Email);
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

【讨论】:

以上是关于MVC Owin Identity 2 CheckPasswordAsync() 不会执行的主要内容,如果未能解决你的问题,请参考以下文章

MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

具有 OpenId owin katana 中间件的多个 MVC 应用程序的单个注销 Identity Server3

MVC中的 程序集添加-----程序包管理器控制台

从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构

ASP.NET Identity 2.0 解密 Owin cookie

实施 Identity 2.1 + OWIN OAuth JWT 不记名令牌时如何从 Web API 控制器端点进行身份验证