gpt4 book ai didi

c# - 无法使用 ASP .NET Core 更新 SQL 位列

转载 作者:行者123 更新时间:2023-11-30 14:21:37 32 4
gpt4 key购买 nike

我有一个 ASP .NET Core 网络应用程序,当我创建项目时,身份验证是使用个人用户帐户选项自动设置的。用户帐户/角色的数据库表也是自动创建的。

我创建了自己的继承自 IdentityUser 的 ApplicationUser 类,并为 FirstName、LastName 和 LockoutReason 添加了参数。 (我也将这些字段添加到数据库表中)现在我正在尝试添加一项功能以允许某人手动锁定用户,但我似乎无法更新数据库中的 LockoutEnabled 字段。每次我这样做,它都会自动重置为 false。

这是表格的图片: enter image description here

以及它的 GET/POST 代码:

//GET Users lock
public async Task<IActionResult> Lock(string id)
{
if (id == null)
{
return NotFound();
}

var userFromDb = await _db.ApplicationUser.SingleOrDefaultAsync(m => m.Id == id);
if (userFromDb == null)
{
return NotFound();
}
else
{
return View(userFromDb);
}
}

//POST Users lock
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Lock(string Id, ApplicationUser model)
{
var userFromDb = await _db.Users.Where(u => u.Id == Id).FirstOrDefaultAsync();

userFromDb.LockoutEnd = model.LockoutEnd;
userFromDb.LockoutEnabled = true;
userFromDb.AccessFailedCount = model.AccessFailedCount;
userFromDb.LockoutReason = model.LockoutReason;

_db.ApplicationUser.Update(userFromDb);
await _db.SaveChangesAsync();

return RedirectToAction(nameof(Index));
}

应用用户.cs

public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string LockoutReason { get; set; }
}

当我单击“锁定”按钮时,LockoutEnd 和 LockoutReason 字段会正确更新,但 LockoutEnabled 字段仍然为 false 且帐户未被锁定。

尝试实现解决方案后的新 POST 方法:

//POST Users lock
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Lock(string Id, ApplicationUser model)
{
var userFromDb = await _db.Users.Where(u => u.Id == Id).FirstOrDefaultAsync();

userFromDb.LockoutEnd = model.LockoutEnd;
userFromDb.AccessFailedCount = model.AccessFailedCount;
userFromDb.LockoutReason = model.LockoutReason;

_db.ApplicationUser.Update(userFromDb);
await _db.SaveChangesAsync();

var user2 = await _userManager.FindByIdAsync(userFromDb.Id);
var result = await _userManager.SetLockoutEnabledAsync(user2, true);

return RedirectToAction(nameof(Index));
}

最佳答案

您需要 LockoutEnabledLockoutEnd 这两个属性的组合。

LockoutEnabled 是一个指示器,用于查看用户是否可以被锁定,LockoutEnd 是一个 DateTimeOffset。因此,为了锁定用户,将锁定设置为 true 并将 LockoutEnd 的值放在未来,因为过去的值意味着用户未被锁定。

关于c# - 无法使用 ASP .NET Core 更新 SQL 位列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53874353/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com