gpt4 book ai didi

c# - 认证成功后如何获取用户信息?

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:23 27 4
gpt4 key购买 nike

目标

认证成功后获取用户信息。

问题

看看下面的代码片段:

[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");
}

如您所见,它是一个普通的身份验证 Controller 。我需要的很简单:如果声明 userModel.IsValid 为真,我如何根据他通过 userModel.Email 发送到服务器的电子邮件获取用户信息?

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

代码聚焦

为了获取某些用户的信息,我使用了一个简单的方法:User.Invoke((string) userEmail)

知识提升

我正在使用 emailpassword 登录我的网站,就像世界上的各种应用程序一样。通过用户输入的 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 处于事件状态而 session 不存在,那么这里就会出现问题 — 一种概念冲突(cookie 与 session )。

我能做什么?

最佳答案

接受的答案(来自与 OP 的讨论)是:检索表单例份验证模块设置的用户名的最直接方法是使用

HttpContext.Current.User.Identity.Name

或者只是

this.User.Identity.Name

在 Controller 中。

关于c# - 认证成功后如何获取用户信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18258612/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com