gpt4 book ai didi

c# - 在 ASP.NET Web 窗体中获取当前登录用户的 ID

转载 作者:行者123 更新时间:2023-11-30 21:57:58 25 4
gpt4 key购买 nike

我想获取当前登录用户的 ID。我可以获得用户名:User.Identity.Name。我有两个表用户和预订。 UserID 是 Reservations 表中的外键。我构建了一个返回当前登录用户 ID 的函数:

private Int32 ReturnUserID() {
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
con.Open();
SqlCommand cmd = new SqlCommand("ReturnUserID", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter p1 = new SqlParameter("Username", User.Identity.Name);
cmd.Parameters.Add(p1);
SqlDataReader rd = cmd.ExecuteReader();
if (rd.Read()) {
int u = Convert.ToInt12(rd["UserID"]);
return u;
} else return 0;

}

请告诉我如何获取和存储当前登录用户的 ID 的具体方法?

最佳答案

您正在使用的教程看起来依赖于 FormsIdentity 和 GenericPrincipal,因此您可以通过转换发现它们的属性:

var p = (GenericPrincipal)HttpContext.Current.User;
var i = (FormsIdentity)HttpContext.Current.User.Identity;
//look for claims or whatever you use to store the ID

如果您有自定义 IIdentity 或 IPrincipal,则更改转换以使用您的自定义类型并以这种方式获取 ID 属性。

编辑:执行我建议的一种方法是从您提到的教程中获取这一行:

HttpContext.Current.User 
= new System.Security.Principal.GenericPrincipal(identity, roles);

...而不是使用 GenericPrincipal,而是创建您自己的 IPrincipal,它也存储用户 ID。这种方法需要针对每个请求往返数据库。

替代方案是将用户 ID 存储在 session 中,这是安全的,但会消耗内存。

最后,您可以将 ID 存储在 FormsAuthenticationTicket 的 UserData 属性中(连同角色)。表单例份验证票证是加密的,但会发送给客户端。这种方法可能是总体上表现最好的方法,并且相当安全。

要采用这种方法,您需要更改教程代码的这一部分以包含 ID:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 
userName,
DateTime.Now,
DateTime.Now.AddMinutes(50),
rememberUserName,
roles + "@@@@" + userId, //<-******** This Line Changes ********
FormsAuthentication.FormsCookiePath);

//... then in Application_AuthenticateRequest() do something like this:

var userData = ticket.UserData.Split(new string[]{"@@@@"}, StringSplitOptions.RemoveEmptyEntries);
var userIdAsString = userData[1];
var roles = userData[0].Split( new char[]{ ',' } );

关于c# - 在 ASP.NET Web 窗体中获取当前登录用户的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30385299/

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