我正在使用 DropCreateDatabaseAlways
初始化程序,因此每次启动应用程序时我的数据库都会被破坏(至少我希望如此)。有趣的是,我仍然看到自己处于登录状态。我通过了 Authorize 属性,可以做危险的事情。这可能是因为之前测试留下的 cookie。
我的应用程序的注册/登录部分是未受影响的 MVC 4 Internet 应用程序模板。 ASP.NET 不应该根据数据库中保存的用户检查 cookie 值吗? WebSecurity.IsAuthenticated
返回 true,WebSecurity.CurrentUserName
返回名称。
唯一按预期工作的是 WebSecurity.CurrentUserId
,它返回 -1。我是新手,所以我只能猜测这是因为 UserId
未存储在 cookie 中,必须从数据库中检索。
我说得对吗?如果是这样,是否意味着我应该始终使用 WebSecurity.CurrentUserId 来确定用户是否已登录?在这种情况下,WebSecurity.IsAuthenticated
和 User.Identity.IsAuthenticated
似乎毫无用处。我可以删除用户的帐户,而他或她不受影响。如果我错了,应该采取什么不同的做法?
最佳答案
如果您想真正检查用户是否未被删除,您只需必须查阅数据库即可。
请注意,用户和管理员同时工作。这意味着用户在通过身份验证后一秒钟就可以被删除。 cookie 甚至可能只有一两秒的历史(!),并且用户可能已经被删除了。
在最悲观的情况下,用户输入有效的用户名和密码并成功登录,并在一个请求后收到“抱歉,您的帐户已被删除”(因为该帐户实际上刚刚被删除)。
关于ASP.NET MVC 对不存在的用户进行身份验证和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16001541/