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

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

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

相关文章:

c# - 标签目标扩展器

Javascript:我的 fbAsyncInit() 方法永远不会被调用

html - 错误 102 (net::ERR_CONNECTION_REFUSED):服务器拒绝连接

ios - 找不到 FBLoginViewDelegate 的协议(protocol)声明

c# - VS2008中.net 2.0的扩展方法

c# - CodedUI [测试方法] 与 [CodedUITest]

c# - C#: How to require error handling for a method?

asp.net-mvc - 不刷新 session 过期的 MVC3 操作

javascript - 通过 Scripts.Render 将自定义属性添加到脚本标记

c# - 错误时的 ASP MVC 和 JsonResult