Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态更改数据库连接后,SignInManager.PasswordSignInAsync始终返回失败_C#_Asp.net Mvc - Fatal编程技术网

C# 动态更改数据库连接后,SignInManager.PasswordSignInAsync始终返回失败

C# 动态更改数据库连接后,SignInManager.PasswordSignInAsync始终返回失败,c#,asp.net-mvc,C#,Asp.net Mvc,我有asp.net MVC代码第一个项目我成功地根据登录值动态更改了连接字符串(数据库是主数据库的副本)和已正确更改,但我始终获得密码UserManager.PasswordHasher.VerifyHashedPassword错误不匹配,如果我忽略此代码,则SignInManager.PasswordSignInAsync始终返回失败,尽管它使用相同的主数据库正确登录 这是我的试用申请bContext public ApplicationDbContext(string connectio

我有asp.net MVC代码第一个项目我成功地根据登录值动态更改了连接字符串(数据库是主数据库的副本)和已正确更改,但我始终获得密码UserManager.PasswordHasher.VerifyHashedPassword错误不匹配,如果我忽略此代码,则SignInManager.PasswordSignInAsync始终返回失败,尽管它使用相同的主数据库正确登录

这是我的试用申请bContext

  public ApplicationDbContext(string connectionstring)
        : base(connectionstring)
        {
        }


        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext(ConString.MeqyasdbCon(ConString.dbCatlogConn));
        }
登录页面

 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl, string language = Config.DefaultLanguage)
        {
 string x = model.UserName.ToLower();
            string dbName = x.Split('_').First();



            var dbname = db.dbLists.Where(t => (t.InitializationLetters == dbName)).Select(t => new { ConnString = t.ConnectionString }).ToList();
            ConString.dbCatlogConn = dbname[0].ConnString;
            //new conection
            var checkconnection = ConString.dbCatlogConn;

            using (db = new ApplicationDbContext(ConString.dbCatlogConn))
            {
                bool CheckConnResult = db.Database.Exists();

                //code here
                var user = db.Users.Where(e => e.UserName.ToLower() == model.UserName.ToLower()).FirstOrDefault();
                var result = new SignInStatus();
                if (user == null)
                    result = SignInStatus.Failure;
                else
                {
                    string dbPassword = dal.DecryptPassword(user.AnotherUsername, user.AnotherSalt, user.PasswordHash);
        // I had to fix dbPassword  to check where is the error
                    var status = UserManager.PasswordHasher.VerifyHashedPassword("Admin", model.Password);
                    if (status == PasswordVerificationResult.Success)
                        // error here
                             result = await SignInManager.PasswordSignInAsync(model.UserName, user.PasswordHash, model.RememberMe, shouldLockout: false);
                            // result = SignInStatus.Success;
                    else
                        result = SignInStatus.Failure;
                }

                switch (result)
                {
                    case SignInStatus.Success:

                        if (user != null)
                        {
                            if (user.Disabled == true)
                            {
                                AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
                                ModelState.AddModelError("", language == "en" ? "Invalid login attempt." : "error ");
                                // rest the connection to default
                                ConString.dbCatlogConn = ConString.MainConn;
                                return View(model);
                                //return View("Lockout");
                            }
                            else
                            {

                                user.LastLoginDateUtc = DateTime.Now.ToUniversalTime();
                                db.SaveChanges();
                                if (User.IsInRole(UsersTypes.Interview.ToString()))
                                {
                                    return RedirectToRoute("tutrial");
                                }

                            }
                        }
                         // returnUrl = "/"; // error it shouldn't be like this alaa mohamed
                        return RedirectToLocal(returnUrl);
                    case SignInStatus.LockedOut:
                        return View("Lockout");
                    case SignInStatus.RequiresVerification:
                        return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                    case SignInStatus.Failure:
                    default:
                        ModelState.AddModelError("", language == "en" ? "Invalid login attempt." : "error ");
                        ConString.dbCatlogConn = ConString.MainConn;
                        return View(model);
                }


            }
}
public异步任务登录(LoginViewModel模型,字符串returnUrl,字符串语言=Config.DefaultLanguage)
{
字符串x=model.UserName.ToLower();
字符串dbName=x.Split(“”“).First();
var dbname=db.dbLists.Where(t=>(t.InitializationLetters==dbname)).Select(t=>new{ConnString=t.ConnectionString}.ToList();
consting.dbCatlogConn=dbname[0].ConnString;
//新连接
var checkconnection=consting.dbCatlogConn;
使用(db=newapplicationdbcontext(consting.dbCatlogConn))
{
bool CheckConnResult=db.Database.Exists();
//代码在这里
var user=db.Users.Where(e=>e.UserName.ToLower()==model.UserName.ToLower()).FirstOrDefault();
var结果=新信号状态();
if(user==null)
结果=信号状态失败;
其他的
{
字符串dbPassword=dal.DecryptPassword(user.AnotherUsername,user.AnotherSalt,user.PasswordHash);
//我必须修改dbPassword来检查错误在哪里
var status=UserManager.PasswordHasher.VerifyHashedPassword(“Admin”,model.Password);
if(status==PasswordVerificationResult.Success)
//这里出错

结果=Wait SignInManager.PasswordSignInAsync(model.UserName、user.PasswordHash、model.RememberMe、shouldLockout:false); //结果=信号状态成功; 其他的 结果=信号状态失败; } 开关(结果) { 案例标志状态成功: 如果(用户!=null) { if(user.Disabled==true) { AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationOkie); ModelState.AddModelError(“,语言==”en“?“登录尝试无效。”:“错误”); //将连接设为默认 consting.dbCatlogConn=consting.MainConn; 返回视图(模型); //返回视图(“锁定”); } 其他的 { user.lastloginandutec=DateTime.Now.ToUniversalTime(); db.SaveChanges(); if(User.IsInRole(UsersTypes.Interview.ToString()) { 返回重定向路由(“tutrial”); } } } //returnUrl=“/”;//错误不应该是这样的alaa mohamed 返回重定向到本地(returnUrl); 案例标志状态锁定输出: 返回视图(“锁定”); 案例标志状态。要求验证: return RedirectToAction(“SendCode”,new{ReturnUrl=ReturnUrl,RememberMe=model.RememberMe}); 案例信号状态故障: 违约: ModelState.AddModelError(“,语言==”en“?“登录尝试无效。”:“错误”); consting.dbCatlogConn=consting.MainConn; 返回视图(模型); } } }
将user.PasswordHash传递给PasswordSignInAsync()方法,但它应该是用户的密码。该方法将为您哈希它。但是它在主数据库中工作正常,并且正确登录“SignInManager.PasswordSignInAsync总是返回失败,尽管它使用相同的主数据库正确登录。”我有点困惑。你能详细说明一下这个问题吗?当我使用主数据库登录时,它工作正常,没有任何问题,然后当我注销并使用另一个与另一个数据库相关的登录时,该数据库是主数据库的副本,但具有不同的名称和不同的连接字符串,我有两个错误,第一个是在UserManager.PasswordHasher.VerifyHashedPassword,第二个在Wait SignInManager.PasswordSignInAsyncJ中。为了清楚起见,您尝试登录的用户是否也存在于新数据库中?