C# 认证成功后如何获取用户信息? 目标

C# 认证成功后如何获取用户信息? 目标,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,成功身份验证后获取用户信息 问题 查看以下代码片段: [AcceptVerbs(HttpVerbs.Post)] [ValidateAntiForgeryToken] [AllowAnonymous] public ActionResult Authenticate(User userModel) { if (ModelState.IsValid) { if (userModel.IsValid(userModel.Email, userModel.Passwor

成功身份验证后获取用户信息

问题 查看以下代码片段:

[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
[AllowAnonymous]
public ActionResult Authenticate(User userModel)
{
    if (ModelState.IsValid)
    {
        if (userModel.IsValid(userModel.Email, userModel.Password))
        {
            FormsAuthentication
                .SetAuthCookie(userModel.Email, userModel.Remember);
            return RedirectToAction("Index", "Manager");
        }
        else
        {
            ModelState.AddModelError("", "Login data is incorrect!");
        }
    }
    return RedirectToAction("Index");
}
如您所见,它是一个普通身份验证的控制器。我需要的很简单:如果语句
userModel.IsValid
为真,我如何根据他通过
userModel.email
发送给服务器的电子邮件获取用户信息

可能将电子邮件存储在会话中,并在
Index
方法中调用一些方法来获取通过参数传递的(用户)信息会话中的电子邮件?(我认为这不是最好的方法,因为如果cookie存在而会话不存在,那么这里就会出现问题。)

代码聚光灯 为了获得某个用户的信息,我使用了一个简单的方法:
user.Invoke((string)userEmail)

知识改进 我正在使用
电子邮件
密码
登录我的网站,就像世界上的各种应用程序一样。通过用户输入的
电子邮件
,我试图从数据库中获取他的信息。所以我问:这是最好的方法吗?也许最好先通过电子邮件获取用户的ID,然后选择他的信息

我已经试过了 在
Authenticate
方法中(与我之前通过的方法相同),我实现了以下代码:

[...]
public ActionResult Authenticate(User userModel)
    [...]
    if (userModel.IsValid(userModel, userModel.Password))
    {
        FormsAuthentication
            .SetAuthCookie(userModel.Email, userModel.Remember);

        Session["UserEmail"] = userModel.Email; // <-- Pay attention to this

        return RedirectToAction("Index", "Manager");
    }
    [...]
}
但是正如我所说的,如果标记用户登录的cookie是活动的,而会话不是活动的,那么这里就有一个问题——一种概念冲突(cookie与会话)

我能做什么?

公认的答案(来自与OP的讨论)是:检索表单身份验证模块设置的用户名最简单的方法是使用

HttpContext.Current.User.Identity.Name
或者只是

this.User.Identity.Name

在控制器中。

我真的不明白为什么你不能用控制器中的这个.User(或指向同一个对象的HttpContext.Current.User)获取电子邮件。我真的不明白你不能理解的东西,哈哈。正如我所说,
IsAuthenticated()
依赖于cookie。。。如果cookie存在,但与用户电子邮件的会话不存在怎么办?为什么您需要会话而不仅仅依赖cookie?在您的示例中,您有两个不同的操作,如果Authenticate设置了cookie,那么索引肯定可以访问用户对象,该用户对象在每个请求期间由Forms Authentication模块自动设置。此外,你请求帮助,但听起来很讽刺。那没用。嗯,我想我开始明白你的意思了。是这样的:在
索引
方法中,使用
User.Invoke(User.Identity.Name)
,对吗?确切地说,this.User.Identity.Name是检索表单模块设置的标识的最直接的方法。
this.User.Identity.Name