首页 > 解决方案 > SignInManager.PasswordSignInAsync 在动态更改数据库连接后总是返回失败

问题描述

我有 asp.net MVC 代码第一个项目我设法根据登录值动态更改我的连接字符串(数据库是主要的副本)并正确更改但我总是得到密码 UserManager.PasswordHasher.VerifyHashedPassword 错误不匹配如果我忽略此代码,SignInManager.PasswordSignInAsync 总是返回失败,尽管它使用同一个主数据库正确登录

这是我的试用 ApplicationDbContext

  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);
                }


            }
}

标签: c#asp.net-mvc

解决方案


推荐阅读