成功验证后获取用户信息。
查看以下代码片段:
[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)
。
我正在使用email
和password
登录我的网站,因为世界各种应用程序都在这里。使用用户输入的email
,我试图从数据库中获取他的信息。所以我问:这是最好的方法吗?也许不是更好首先通过他的电子邮件获取用户的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");
}
[...]
}
然后,在Index
方法中:
public ActionResult Index()
{
if(Request.IsAuthenticated())
{
UserProfile user = User.Invoke(Session["UserEmail"]));
return View(user);
}
else
{
return View();
}
}
但正如我所说,如果标记用户登录的cookie是活动的而会话没有,那么这里就会出现问题 - 一种概念冲突(cookie vs.会话)。
我该怎么办?
答案 0 :(得分:2)
接受的答案(来自与OP的讨论)是:检索表单身份验证模块设置的用户名的最直接方法是使用
HttpContext.Current.User.Identity.Name
或只是
this.User.Identity.Name
在控制器中。