我正在考虑在我的 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/