我有一个MVC 5应用程序,它将OWIN中间件用于Identity Framework。现在它工作正常,并将未经授权的用户发送到"帐户/登录"页面。该应用程序使用本地登录(不是facebook/google等)。
我需要更改它,以便它打开一个模式弹出窗口,询问用户名/密码,而不是重定向到页面。我该怎么做?
更新:谢谢@StevenGreene和@chris。让我再澄清一点。是的,我知道当用户明确想要登录时,我可以很容易地使用模式弹出窗口。我想要的是,当他们点击需要授权的控制器/操作的链接时,应用程序应该显示一个弹出窗口,而不是将他们重定向到登录页面(或控制器页面)。一旦他们登录,页面就应该重定向到他们请求的控制器/操作。如果我接受Chris的建议并在控制器内进行检查,我将无法使用[Authorize]属性,对吗?有没有比在所有操作中手动检查身份验证更好的方法?
真的,这与标准登录表单没有什么不同。唯一真正的区别是,该表单位于最初隐藏的模式弹出窗口中,是布局的一部分,还是每个页面上的其他部分,您拥有的任何登录链接都只会激活此弹出窗口,而不是导航到新的URL。登录后,即使返回到同一页面,您仍然希望进行重定向,这样MVC就可以在HttpContext中实际填充用户主体。
然而,当用户导航到需要授权的页面时,您仍然需要一个标准的登录表单来重定向到。首先,你不能动态设置MVC将未经授权的用户导航到的URL。它是在web.config中设置的,这就是你所能得到的。其次,即使你可以,你也不能同时保护一个页面并显示它,即使你打算在页面顶部显示一个模态登录表单。你必须允许匿名访问所有页面,这时你可以确定用户是否通过了身份验证,并在必要时显示模态登录表单。然而,在这一点上,聪明的用户可以深入到浏览器的开发工具中,删除模态并继续使用页面。
总之,当用户明确选择登录时,您可以有一个模式登录表单,但如果他们访问了需要授权的页面,您仍然需要一个标准表单来将他们重定向到。