【问题标题】:User.Identity.Name returns guidUser.Identity.Name 返回 guid
【发布时间】:2016-08-31 09:56:36
【问题描述】:

由于某些(晦涩的)原因,我的 MVC 4 应用程序在我运行时返回了一个 guid:

var name = User.Identity.Name;

我还在一个全新的 MVC 4 应用程序中对此进行了测试,这对我来说是新行为。当我查看有关 IIdentity 的文档时,它指出(我记得)Identity.Name 应该

获取当前用户的名字。

为什么它在我的情况下返回一个 guid?

来自 web.config

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

更多相关信息: 该应用程序也部署在另一台机器上,与同一个数据库通信。我们在该数据库中使用“User.Identity.Name”的值,当用户(新用户)不存在时,我们使用该 guid 添加一个新用户。

现在,奇怪的是:当您切换应用程序(从 localhost 到部署在 T 上的应用程序)时,您需要再次登录。然后将 User.Identity.Name 设置为新的 guid。

(对于启动器默认应用程序,我们当然不会与 DB 对话,但同样的事情也会发生;User.Identity.Name 返回一个 guid)

【问题讨论】:

  • 你用什么来认证/授权
  • 这只是 MVC4 互联网应用程序的默认模板:这是愚蠢的事情;您通常不必考虑这些事情...
  • 也许this 可能对你有用-或者- link 也可能有用
  • 检查了链接:如果我没记错的话,这些链接是为了找出 what guid 属于用户。我有一个完全相反的问题:为什么有一个指南?!
  • 您没有对模型/上下文/...进行任何其他更改?

标签: c# .net asp.net-mvc asp.net-mvc-4


【解决方案1】:

您需要找到与当前用户对应的通用主体对象。

using System.Security.Principal;
...

GenericPrincipal genericPrincipal = GetGenericPrincipal();
GenericIdentity principalIdentity = (GenericIdentity)genericPrincipal.Identity;
string fullName = principalIdentity.Name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2012-02-24
    相关资源
    最近更新 更多