我是 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/