【问题标题】:getting username which is set in UserData of FormsAuthenticationTicket获取在 FormsAuthenticationTicket 的 UserData 中设置的用户名
【发布时间】:2010-12-23 22:26:45
【问题描述】:

我正在考虑在我的视图中使用它来获取我网站的用户名(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 connect 并希望将 ID 存储在数据库的用户名字段中,并将他们的用户名/全名存储在单独的表中。

所以我处理 facebook 用户名和我的网站注册用户名的逻辑需要以不同方式处理。登录后我想在那里处理它,然后将 userdata 设置为实际用户名。

因此,在整个站点中,我可以使用以下方式获取登录用户名:@MySite.Helpers.Utils.UserName

这听起来好吗?它是一个静态变量这一事实会成为问题吗?

或者有没有更好的方法来管理这个?会话变量可能吗?

谢谢

【问题讨论】:

  • 我很确定将id 存储为静态变量会给您带来问题。改为将其变为属性。
  • @jbinto 这是一个不准确的语句,因为操作的 id 值在运行时通过 HttpContext.Current 对象绑定到上下文实例。通过@raklos 的编码方式,您可以在运行时获取 id,如果您处于无法访问 HttpContext.Current 的状态,您将仅访问当前请求的 id,您将收到空引用错误。跨度>

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


【解决方案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()

【讨论】:

  • 我意识到这一点,但我继续解释为什么我将它存储在那里。我的 facebook 用户名保存在不同的表中。我基本上想要一种简单的方法来获取用户名,无论是 Facebook 用户还是网站注册用户。
  • @raklos,所以存储在 UserData 中的用户名与存储在身份验证 cookie 中的用户名不同,即当前登录的用户与存储在 UserData 属性中的用户不同?跨度>
  • @Darin - 在我的网站上注册的人 - @User.Identity.Name 将提供用户名。使用 facebook @User.Identity.Name 注册的人将提供他们的 facebook ID - 一堆数字。他们的名字存储在一个单独的表中。我希望能够以一种方式无缝获取用户名,这就是我考虑将其放入 UserData 的原因。
  • @raklos,好的,我现在明白了。所以你只需要稍微重新调整一下我的辅助方法,你就可以开始了。我个人更喜欢辅助方法而不是使用静态方法。
  • @Darin, - 我需要包含@using Mysite.Helpers.Extensions;在每个使用用户名的视图中?
猜你喜欢
  • 2013-05-11
  • 2014-03-08
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多