【问题标题】:SignalR Asp.NET MVC5 User InfoSignalR Asp.NET MVC5 用户信息
【发布时间】:2015-11-13 00:30:12
【问题描述】:

我正在尝试创建一个聊天应用程序,我想显示用户的名字。但是用户名是他们的电子邮件,使用

var userName = HttpContext.Current.User.Identity.Name.ToString();

返回他们的电子邮件。如何访问模型具有和数据库具有的 Firstname 属性。

当他们注册时,他们必须输入名字,并且数据库存储它,我只是不知道如何在我的 ChatHub 聊天中显示它

【问题讨论】:

  • 查看身份文档,似乎只保留了名称-其余的是身份验证信息-请参阅msdn.microsoft.com/en-us/library/…。您可能需要将其从 db/local 缓存中取出并将其发送回返回对象。
  • 另外,您不应该在集线器内部使用 HttpContext。您在集线器内有 Context.User.Identity.Name 可用,这是 SignalR 中推荐的。

标签: javascript sql-server asp.net-mvc-5 signalr


【解决方案1】:

如果您需要在 UI 中的某个地方获取用户名并显示它,那么您可以从那里获取并将其作为参数发送到您的服务器方法。

如果您没有在客户端的任何地方检索它,请从您的中心内的数据库中获取它。

注意:停止使用 HttpContext 全局静态属性。在 SignalR 集线器内,您可以访问 Context,这是您应该使用的。

希望这会有所帮助!祝你好运!

【讨论】:

  • 目前我正在从包含 ViewData 数组全名的 div 中获取它并将其传递给服务器,但我觉得这不是最佳实践。并且 Context.Identity 的用户名是电子邮件,而不是我添加的名字或姓氏属性。
  • 如果您使用标准的 MVC 个人用户帐户身份验证,您将从任何上下文中获取的 User.Identity.Name 将是电子邮件地址。至于 HttpContext,在任何集线器内使用 HttpContext 绝不是好的做法。为了在集线器中访问相同的信息,请使用 SignalR 专用的 Context。这样想:如果您的客户端不是网页而是桌面或移动应用程序,那么您将在 HttpContext 中拥有什么?
  • 对,我同意你的观点,我应该使用 Context 与 HttpContext。但是,这并不能解决想要获取除电子邮件地址和身份之外的不同属性的原始问题。比如名字,也许是姓氏,也许还有我为用户设置的其他属性。
  • 在您的 Context/HttpContext 中,您只有 Name 作为应用程序中用户的全局标识符(在 MVC 中完成的身份验证的情况下 - 电子邮件地址)。正如我在 asnwer 中所说,我看到的唯一方法是使用从 Context.User.Identity.Name 获取的电子邮件地址从数据库中获取信息
  • 这正是我的想法,试图避免查询数据库,但我想这不会太糟糕,因为它只会从服务器端完成,不会暴露在我的 JS 中,谢谢寻求帮助 Matei_Radu!我是 ASP.NET 的新手,通常在 Windows 上开发一个 webapp。只是想确保我采用最佳实践,尤其是在安全/速度方面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 2013-09-23
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多