gpt4 book ai didi

c# - 获取在 FormsAuthenticationTicket 的 UserData 中设置的用户名

转载 作者:行者123 更新时间:2023-11-30 18:06:46 27 4
gpt4 key购买 nike

我正在考虑在我的 View 中使用它(Razor 语法)来获取我网站的用户名:

@MySite.Helpers.Utils.UserName

这是 utils 类:

public class Utils
{
static FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;

public static string UserName { get { return id.Ticket.UserData; } }
}

此代码是否存在任何潜在问题?

我这样做的原因是因为我要在用户登录时将用户名存储在新 FormsAuthenticationTicket 的用户数据字段中。

我这样处理它是因为我正在使用 facebook 连接并希望将 ID 存储在数据库的用户名字段中,并将他们的用户名/全名存储在单独的表中。

所以我处理 facebook 用户名和我的网站注册用户名的逻辑需要以不同的方式处理。登录后,我想在那里处理它,然后将用户数据设置为实际用户名。

因此在整个站点中,我只能使用以下方式获取登录用户名:@MySite.Helpers.Utils.UserName

这听起来不错吗?它是一个静态变量这一事实会成为问题吗?

或者有更好的方法来管理它吗?可能是 session 变量?

谢谢

最佳答案

The reason Im doing it like this is because Im going to store username in the userdata field of a new FormsAuthenticationTicket when the user logs in.

当前登录用户的用户名已经存储在身份验证 cookie 中。您不需要将其再次存储在 UserData 中。为了在你的 Razor 模板中检索它,你可以简单地:

@User.Identity.Name

显然,建议使用 [Authorize] 属性修饰呈现此 View 的 Controller 操作,以确保用户在访问它之前经过身份验证,否则您可能会得到 NullReferenceException 使用此代码。

作为替代方案,您可以编写一个助手:

public static MvcHtmlString Username(this HtmlHelper htmlHelper)
{
var identity = htmlHelper.ViewContext.HttpContext.User.Identity;
if (identity.IsAuthenticated)
{
return MvcHtmlString.Create(identity.Name);
}
return MvcHtmlString.Empty;
}

你可以这样使用:

@Html.Username()

关于c# - 获取在 FormsAuthenticationTicket 的 UserData 中设置的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519352/

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