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

时间:2010-12-23 13:54:56

标签: c# asp.net-mvc facebook forms-authentication

我想在我的视图中使用这个来获取我的网站的用户名(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

这听起来不错吗?它的静态变量是一个问题吗?

还是有更好的方法来管理它?会话变量可能吗?

感谢

1 个答案:

答案 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()