首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取UserID而不是UserName

问获取UserID而不是UserName
EN

Stack Overflow用户
提问于 2014-11-17 19:48:30
回答 2查看 182关注 0票数 0

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

就是这样:

代码语言:javascript
复制
[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,它获取用户DB数据(姓名、电子邮件、姓氏等):

代码语言:javascript
复制
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);

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-17 19:54:28

您得到的是ID而不是名称,因为您将ID而不是名称放在auth cookie中:

代码语言:javascript
复制
FormsAuthentication.SetAuthCookie(user.DEV001_Users_Id.ToString(), model.RememberMe);

无论您在cookie中设置了什么值,都将在User.Identity.Name中得到什么。

票数 3
EN

Stack Overflow用户

发布于 2014-11-17 19:57:08

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

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

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

代码语言:javascript
复制
FormsAuthentication.SetAuthCookie(model.Username, model.RememberMe);

顺便说一句,我不太喜欢这里的暗示,你是在用纯文本存储密码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26980717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档