C# 正在获取在FormsAuthenticationTicket的UserData中设置的用户名
我正在考虑在我的视图中使用此选项(Razor语法)获取我网站的用户名: 以下是utils类:C# 正在获取在FormsAuthenticationTicket的UserData中设置的用户名,c#,asp.net-mvc,facebook,forms-authentication,C#,Asp.net Mvc,Facebook,Forms Authentication,我正在考虑在我的视图中使用此选项(Razor语法)获取我网站的用户名: 以下是utils类: public class Utils { static FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity; public static string UserName { get { return id.Ticket.UserData; } } } 此代码是否存在任何潜在问题 我这样做的原因是,当用
public class Utils
{
static FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
public static string UserName { get { return id.Ticket.UserData; } }
}
此代码是否存在任何潜在问题
我这样做的原因是,当用户登录时,我会将用户名存储在新表单的userdata字段中
我是这样处理的,因为我正在使用FacebookConnect,希望在db的用户名字段中存储那里的ID,并将他们的用户名/全名存储在一个单独的表中
因此,我处理facebook用户名和我的网站注册用户名的逻辑需要以不同的方式处理。登录后,我想在那里处理它,然后将userdata设置为实际用户名
因此,在整个站点中,我只需使用:@MySite.Helpers.Utils.UserName
这听起来可以吗?它是一个静态变量这一事实会成为一个问题吗
还是有更好的管理方法?可能是会话变量
谢谢
我这样做的原因是
因为我要把用户名存储在
新数据库的userdata字段
当
用户登录
当前登录用户的用户名已存储在身份验证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()
我意识到了这一点,但我继续解释为什么我要把它储存在那里。我的facebook用户用户名保存在另一个表中。我基本上想要一种简单的方法来获取用户名,无论是facebook用户还是站点注册用户。@raklos,因此存储在UserData中的用户名与存储在身份验证cookie中的用户名不同,即,当前登录的用户与存储在UserData属性中的用户不同?@Darin-在我的网站上注册的人-@user.Identity.Name将提供用户名。使用facebook@User.Identity.Name注册的人会给出他们的facebook ID——一组数字。它们的名称存储在单独的表中。我希望能够以一种方式无缝地获取用户名,这就是我考虑将其放入UserData的原因。@raklos,好的,我现在明白了。所以你只需要重新适应一下我的助手方法,你就可以开始了。就我个人而言,我更喜欢helper方法,而不是使用静态方法。@Darin,-我是否需要包括@using Mysite.Helpers.Extensions;在每个使用username?的视图中,我非常确定将
id
存储为静态变量会给您带来问题。改为将其设置为属性。@jbinto这是一个不准确的语句,因为op在运行时通过HttpContext.Current对象将id值绑定到上下文实例。通过@raklos的编码方式,您可以在运行时访问gaurentee,如果您处于无法访问HttpContext的状态,则您将仅访问当前请求的id。当前,您将获得一个空引用错误。
@Html.Username()