ASP.. NET MVC身份登录使用数据库值

本文关键字:数据库 登录 NET MVC 身份 ASP | 更新日期: 2023-09-27 18:08:28

在过去的几天里,我一直在努力让登录功能为我的ASP工作。NET MVC应用程序。我的应用程序的用户数据存储在MS SQL数据库(2008 R2)中。该数据的表如下:

table EMPLOYEE
EMPLOYEECODE        int                  identity
NAME                varchar(75)          not null
PASSWORD            varchar(255)         not null

使用实体框架产生以下模型:

public partial class EMPLOYEE
{    
    public int EMPLOYEECODE { get; set; }
    public string NAME { get; set; }
    public string PASSWORD { get; set; }
}

我想做的是编辑提供的(默认)AccountController,使其能够使用EMPLOYEE(EMPLOYEECODE, PASSWORD)来验证和登录用户。我想我需要改变我的UserManager,使其使用雇员和字段EMPLOYEECODE和PASSWORD,但我不知道如何。当前登录方式如下:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var user = await UserManager.FindAsync(model.UserName, model.Password);
        if (user != null)
        {
            await SignInAsync(user, model.RememberMe);
            return RedirectToLocal(returnUrl);
        }
        else
        {
           ModelState.AddModelError("", "Invalid username or password.");
        }
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

My UserManager实例化如下:

public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }

我怎样才能解决这个问题?我也尝试过使用身份验证cookie,但我不知道如何从cookie中检索用户名。任何帮助将非常感激!

ASP.. NET MVC身份登录使用数据库值

UserManager和UserStore与ASP. net相关联。NET身份认证用自己的表对用户、角色等进行认证。如果你想使用不同的表,你必须创建一个自定义的登录功能。

我有一个类似的请求,我最终做的是:

  • 使用迁移创建标识表
  • 修改Id类使用和INT代替GUID作为Id
  • 我的数据从Employee表迁移到AspNetUsers表
  • 在你的例子中,将EmployeeCode映射到AspNetUsers。Id字段和密码到AspNetUsers.PasswordHash。
  • 根据密码在Db中的保存方式,您可能需要在这里添加额外的步骤以散列格式将密码放入表中。

如果您的密码需要散列,而不是迁移数据,请查看如何在Identity中注册用户,并将现有用户置于相同的过程中,如下所示:

  1. 获取Employee表中所有用户的列表
  2. 对于每个用户,使用自己的上下文来检索UserManager和SignIn Manager
  3. 使用EmployeeCode和EmployeePassword创建一个新的ApplicationUser
  4. 使用UserManager在数据库中创建用户