【问题标题】:How do I set the value in User.Identity.Name to the user's real name?如何将 User.Identity.Name 中的值设置为用户的真实姓名?
【发布时间】:2012-03-19 14:29:39
【问题描述】:

我的用户使用我的自定义会员服务提供商的电子邮件地址和密码登录。有没有办法让User.Identity.Name(或其中的其他内容)返回用户的真实姓名而不是他们的用户名(或我的情况下的电子邮件地址),同时保留电子邮件地址以便仍然可以使用?如果这不是做我想做的事的好方法,你建议怎么做?

我认为“Welcome Mike Wills”看起来比“Welcome bigdaddy124@mydomain.com”更好。

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    您可以将用户的配置文件对象(或名称)添加到 Session 变量中,这样您就不必为每个页面加载查询数据库。

    【讨论】:

    • 有比使用会话对象更好的架构替代方案(如果你还没有的话)这里有零强类型任何东西。你被魔法字符串卡住了,你必须知道表单身份验证超时和会话超时不会同步。
    • @AdamTuliper 我认为处理缓存变量生命周期的辅助类可以正确完成整个工作。我看不出这个设计有什么问题。
    • 不是强类型的。如果您有一个读取会话的助手类,为什么不将其存储在 IPrinciple 中的当前用户信息中,而不是魔术字符串、会话超时与表单身份验证超时问题(大多数人不知道这个问题,但它肯定会咬人即使超时设置完全相同)等等
    • @AdamTuliper-MSFT 有一个IPrincipal 的实现,它为IsInRole(string role) 抛出一个NotImplementedException(因为我不想使用它,有人说“魔术字符串”吗?),也不是理想的情况。
    • @Stijn 采取两害相权取其轻。会话对象锁定并阻止序列化的 ajax 请求(实际上阻止任何使用该用户会话对象的新请求,直到完成第一个请求,这可能会降低性能)以及上述原因(表单身份验证和会话超时需要特殊的解决方法来同步他们 - 大多数人也不知道这个问题)强类型问题等。
    【解决方案2】:

    这里最好的方法是实现自定义原则,以便字段可用,不要试图“滥用”现有字段。只需将 IPrinciple 用法转换为您的原则类并引用 FullName 字段(或您所称的任何名称)

    Implementing IPrincipal and IIdentity in MVC with use of custom membership and role provider

    【讨论】:

      【解决方案3】:

      一个单独的“用户”数据库表来存储与会员表相关的个人信息......

      这样可以使您的身份验证和授权数据与您的自定义用户数据分开(但链接到)。更容易管理恕我直言。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-03-18
        • 2021-06-15
        • 1970-01-01
        相关资源
        最近更新 更多