获取用户 ID 而不是用户名

本文关键字:用户 ID 获取 | 更新日期: 2023-09-27 18:30:37

我正在使用C# MVC开发一个简单的Web应用程序。这是一个登录页面。当我尝试登录系统时,有一个公共登录功能,它获取用户名和密码。

就是这样:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var db = new Entities2();
        var user = db.DEV001_Users.FirstOrDefault(u => 
            u.Username == model.Username && 
            u.Password == model.Password);
        if (user != null)
        {
            FormsAuthentication.SetAuthCookie(user.DEV001_Users_Id.ToString(), 
                model.RememberMe);
            return RedirectToLocal(returnUrl);
        }
        else
        {
            ModelState.AddModelError("", "Invalid username or password.");
        }
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

另一方面,我有另一个控制器,称为HomeController,它获取用户数据库数据(姓名,电子邮件,姓氏等):

var db = new Entities2();
var Username = User.Identity.Name;
var users = db.DEV001_Users.Where(u => u.EmailAddress.ToLower() == Username.ToLower());
var UserModel = new DEV001_Users();
if (users != null)
{
    var user = users.First();
    UserModel.EmailAddress = user.EmailAddress;
    UserModel.GivenName = user.GivenName;
    UserModel.Surname = user.Surname;
}
return View(UserModel);

现在,问题是,当我想获取带有 User.Identity.Name 的用户名时,它给了我该记录的 ID,而不是用户名。 我不知道还能做什么。

获取用户 ID 而不是用户名

您获得的是 ID 而不是名称,因为您将 ID 而不是名称放在身份验证 cookie 中:

FormsAuthentication.SetAuthCookie(user.DEV001_Users_Id.ToString(), model.RememberMe);

您在 cookie 中设置的任何值都是您将在 User.Identity.Name .

当然,

当您访问不同的字段时,您会在两个函数中获得不同的结果:在第一个字段中,user.DEV001_Users_Id可能是整数,在第二个user.EmailAddress和其他字段中。

事情是这样的:您已经在 model.Username 中拥有用户名。实际上,您正在将其作为您提供给 FirstOrDefault 的 where 子句的一部分进行查询,因此我们知道model.Username是此DEV001_Users行中的用户名。

因此,一旦您验证了数据库中是否存在该用户并执行了您可能正在执行的任何其他检查(例如检查他们是否被禁止),您就可以将代码修改为以下内容:

FormsAuthentication.SetAuthCookie(model.Username, model.RememberMe);

顺便说一下,我不太热衷于您以纯文本形式存储密码的含义。