c# - 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);
}
}
}
解决方案
推荐阅读
- javascript - 从父组件到子组件的角度绑定对象
- iis - 如何使用 IIS 启用压缩
- javascript - Javascript/Node.js - 如何将 node-fetch 的输出分配给 var (Node-Fetch API)
- docker - Docker登录因nexus存储库而失败
- wpf - 更改用户控件 DependencyProperty 时属性重置
- java - Spring Cloud 函数中 MessageConverter 的使用,用于以 SQS 事件作为触发器的 lambda
- javascript - 使用 PHP 回显 HTML 时防止 XSS 攻击
- r - 防止 R 变量被修改/在未赋值时抛出警告
- tensorflow - 将 keras 模型(基于 TensorFlow 1.13 构建)升级到 TF2 的最佳方法
- python - 输入后菜单选项不断重复。我做错了什么?