c# - MVC3 + 如何获取当前登录用户的用户名

标签 c# asp.net-mvc asp.net-mvc-3 razor

我是 MVC 的新手,实际上也是 Web 开发的新手。我有大约 7 年的开发经验,但在服务、数据库、对象模型等方面。基本上是中间层和后端开发。我正在尝试学习 ASP.NET 并决定使用 MVC3 为我自己的个人网站构建一个网站。我将从 dotnet-hosts.com 上的帐户托管它。这是我的问题...我没有域,我将使用内置的成员(member)提供程序。我在添加项目模板时创建的自动生成代码中注意到,在 ChangePassword 方法(ChangePasswordModel 模型)中的 AccountController 中这行代码是...

MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);

我的问题专门针对 User.Identity.Name,这看起来会像 Environment.UserName 一样返回 Windows 用户名。我使用的 Visual Studio 模板是(Mobile Ready HTML5 MVC.NET),因为我希望能够支持来自任何设备的客户端...Windows PC、Apple、Windows Phone、iPhone 等...如果调用 User.Identity.Name 是正确的那么我想问一下这在非 Windows 设备(如 iPhone)上如何工作?如果我的假设是正确的,即这仅适用于具有域的 Windows 计算机,那么我该如何实现呢?我可能需要使用一些缓存吗?如果可以的话,我是否可以获取用户名和他们的 IP 地址以用作身份验证页面中的缓存 key ?

我的高级问题是...无论设备/平台如何,如何获取当前登录用户的用户名?我知道这个问题可能写得不好,可能很难理解……我为此道歉。我是 Web 开发的新手,正在尝试接触最新的技术。

最佳答案

调用正确。 User.Identity.Name 由正在使用的任何身份验证提供程序填写 - Windows 身份验证、Forms 身份验证、某些自定义身份验证提供程序或其他任何身份验证提供程序。它不绑定(bind)到特定的用户“类型”。身份验证提供程序有责任确保 Identity 对象对应于每个请求的当前用户。通常这部分是使用 cookie 和数据库的组合来处理的。

MVC 模板(尽管自 MVC 2 以来我还没有看过该模板)使用 ASP.NET 的 Membership 类,该类又使用成员提供程序 - 例如 SqlMembershipProvider ActiveDirectoryMembershipProvider - 前者将用户的凭据(用户名和密码等)存储在 SQL Server 数据库中,后者使用 Active Directory(即主要是 Windows 登录)。 SqlMembershipProvider 是默认设置,MVC 设置为使用本地 SQLExpress 数据库文件作为其用户存储。

在模板项目中实现的身份验证提供程序使用 FormsAuthentication,它通过一个简单的 HTML 表单(LogOn View 中的表单)执行登录过程并保留用户通过加密 cookie 登录。适用于任何平台。

FormsAuthentication 和 SqlMembershipProvider 的设置可以在 web.config(站点根目录中的那个)中找到。在那里您可以找到 SQLExpress 数据库的连接字符串(例如,如果需要,将它们更改为使用“真正的”SQL Server)、登录超时等。

(请注意,您可以通过 Visual Studio 解决方案资源管理器工具栏中的“ASP.NET 配置”按钮在 GUI 中轻松完成大量配置 - 它还提供了一种设置第一批用户的简单方法) .

简而言之,一切就绪 - 并且不会将非 Windows 用户拒之门外。

关于c# - MVC3 + 如何获取当前登录用户的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252516/

相关文章:

javascript - 使用 jquery 将属性附加到输入元素

c# - 你如何根据用户交替 Ninject 绑定(bind)?

c# - Listpicker 多选和 DisplayMemberPath

c# - 在 ASP.NET 中轮询 Google Big Query 结果期间调用 Thread.Sleep 是否合适?备择方案?

c# - 从同一服务器上的 Windows 服务发送在 ASP.NET MVC 应用程序中运行的 SignalR 广播

asp.net-mvc-3 - 我应该如何在 MVC3 中使用 Code First Entity Framework (4.1) 声明外键关系?

javascript - Asp.Net MVC 3 formcollection在提交后丢失数据

c# - 为什么这些数据绑定(bind)不更新?

c# - 如何在功能区窗口 wpf C# 中显示状态栏

html - 根据条件在Angularjs中动态应用CSS样式属性