我想在我的视图中使用这个来获取我的网站的用户名(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的userdata字段中存储用户名。
我正在处理它,因为我使用facebook连接并希望在数据库中的用户名字段中存储ID,并在单独的表中存储其用户名/完整名称。
所以我处理facebook用户名和我的网站注册用户名的逻辑需要以不同的方式处理。登录后我想在那里处理它然后将userdata设置为实际的用户名。
因此,在整个网站中,我只需使用以下内容获取登录用户名:@MySite.Helpers.Utils.UserName
这听起来不错吗?它的静态变量是一个问题吗?
还是有更好的方法来管理它?会话变量可能吗?
感谢
答案 0 :(得分:1)
我这样做的原因是 因为我要存储用户名 新的userdata字段 FormsAuthenticationTicket时 用户登录。
当前登录用户的用户名已存储在身份验证Cookie中。您无需再次在UserData中存储它。并且为了在您的Razor模板中检索它,您可以简单地:
@User.Identity.Name
显然,建议使用[Authorize]
属性修饰此视图的控制器操作,以确保用户在访问之前经过身份验证,或者您可能会获得带有此代码的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()