2017-12-18 213 views
-2

我的目标是如果用户点击他所在的页面链接(或张贴表单),将弹出一个模式窗口未授权的,因为它比重定向到通用错误页面更好的用户体验。当未经授权导航到页面时,大多数不冒险的方式使模式窗口弹出

我所做的就是实现

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     // ... 
    } 

,这样,如果该请求是一个非AJAX请求,然后将其重定向到同一个页面(给住在同一页上的错觉),并追加查询字符串与"forbiddenRedirect=true"然后JavaScript打开错误模式。我试图想出一个比使用查询字符串更好的方法。据我所知,JavaScript无法访问响应头文件,只能访问URL。这就是为什么我使用查询字符串解决方案。但也许在MVC中,我可以通过某种方式重定向并传递基本控制器可以识别的某种令牌,然后将其添加到查看包中,如ViewBag.IsRedirectFromUnauthorizedAction = true

有什么建议吗?

回答

0

用户应该永远不要进入他们可以发布数据而无需通过认证和授权的页面!

如果您的用户可以获取他们可以发布信息的表单(让用户配置文件页面放手),那么他们应该在他们甚至可以到达之前进行身份验证。因此,例如,您将引导用户前登录页面之前,您允许他们访问编辑配置文件页面。一旦他们对自己进行了身份验证,并且已经检查他们有权在特定页面上执行POST,则可以使用然后向他们提供表单。

但是如果他们的会话超时呢?

在用户进行身份验证,并得到该页面,那么他们的会话超时的情况下,你应该将其重定向回登录页面提示输入他们的凭据,他们再次拒绝他们的岗位要求。在理想情况下,您应该每隔30秒左右在后台运行一次AJAX功能。如果他们闲置了一段时间(比如说5分钟),那么您可以假设他们关闭了浏览器或将他们的电脑无人看管。此时,可以询问用户(通过模态窗口)他们是否希望保持登录或在30秒内注销。如果他们点击保持登录按钮,让他们成为。如果他们没有回答,则可以将其注销并自动将其重定向回登录页面。