ASP.NET MVC 对不存在的用户进行身份验证和授权

标签 asp.net asp.net-mvc asp.net-membership simplemembership

我正在使用 DropCreateDatabaseAlways 初始化程序,因此每次启动应用程序时我的数据库都会被破坏(至少我希望如此)。有趣的是,我仍然看到自己处于登录状态。我通过了 Authorize 属性,可以做危险的事情。这可能是因为之前测试留下的 cookie。

我的应用程序的注册/登录部分是未受影响的 MVC 4 Internet 应用程序模板。 ASP.NET 不应该根据数据库中保存的用户检查 cookie 值吗? WebSecurity.IsAuthenticated 返回 true,WebSecurity.CurrentUserName 返回名称。 唯一按预期工作的是 WebSecurity.CurrentUserId,它返回 -1。我是新手,所以我只能猜测这是因为 UserId 未存储在 cookie 中,必须从数据库中检索。

我说得对吗?如果是这样,是否意味着我应该始终使用 WebSecurity.CurrentUserId 来确定用户是否已登录?在这种情况下,WebSecurity.IsAuthenticatedUser.Identity.IsAuthenticated 似乎毫无用处。我可以删除用户的帐户,而他或她不受影响。如果我错了,应该采取什么不同的做法?

最佳答案

如果您想真正检查用户是否未被删除,您只需必须查阅数据库即可。

请注意,用户和管理员同时工作。这意味着用户在通过身份验证后一秒钟就可以被删除。 cookie 甚至可能只有一两秒的历史(!),并且用户可能已经被删除了。

在最悲观的情况下,用户输入有效的用户名和密码并成功登录,并在一个请求后收到“抱歉,您的帐户已被删除”(因为该帐户实际上刚刚被删除)。

关于ASP.NET MVC 对不存在的用户进行身份验证和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16001541/

相关文章:

javascript - 来自 JSON 数据的饼图

c# - 如何保护 ASP.NET Web API

c# - 我可以在服务器上传递一个转换为 List<int> 的查询字符串吗?

c# - IIS7 是否使用不同的默认成员资格提供程序?

javascript - 以编程方式实例化 mailto

MySql 身份与 MVC 5

ASP.NET MVC 自定义错误页面陷入重定向循环

c# - CSV 文件上传错误

c# - ASP.NET 用户/角色编辑器

asp.net - 如何在 EF DbContext 和 AspNet Membership 之间共享连接以避免事务升级到 DTC