大多数非hacky方式在未经授权导航到页面时弹出模态窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大多数非hacky方式在未经授权导航到页面时弹出模态窗口相关的知识,希望对你有一定的参考价值。

我的目标是,如果用户点击未经授权的页面链接(或POST表单),则会弹出一个模态窗口弹出窗口,因为它比重定向到一般错误页面更好的用户体验。

我所做的就是实施

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

因此,如果请求是非AJAX请求,那么它会重定向到同一页面(给出停留在同一页面上的错觉)并使用"forbiddenRedirect=true"附加查询字符串,然后javascript打开错误模式。我想要比使用查询字符串更好的方法。据我所知,JavaScript无法访问响应标头,只能访问URL。这就是我使用查询字符串解决方案的原因。但也许在MVC中我可以通过某种方式重定向并传递基本控制器可识别的某种令牌,然后像ViewBag.IsRedirectFromUnauthorizedAction = true一样向视图包添加内容。

有什么建议?

答案

用户永远不应该访问他们可以发布数据而不经过身份验证和授权的页面!

如果您的用户可以访问他们可以发布信息的表单(让我们使用用户个人资料页面),他们应该在他们可以到达之前进行身份验证。因此,例如,在允许用户访问“编辑配置文件”页面之前,您将引导用户进入“登录”页面。一旦他们对自己进行了身份验证并且您已经检查过他们有权​​在特定页面上执行POST,那么您需要向他们提供表单。

但如果他们的会议超时怎么办?

如果用户进行身份验证并访问该页面,然后他们的会话超时,您应该将他们重定向回登录页面,再次提示他们输入凭据并拒绝他们的发布请求。在理想情况下,您应该每隔30秒左右在后台运行一个AJAX函数。如果他们闲置一段时间(比方说5分钟),那么你可以假设他们关闭了浏览器或者无人看管他们的PC。此时,要么询问用户(通过模态窗口)是否要保持登录状态,要么在30秒内注销。如果他们单击“保持登录状态”按钮,请将其保留。如果他们没有回答,您可以将其注销并自动将其重定向回“登录”页面。

以上是关于大多数非hacky方式在未经授权导航到页面时弹出模态窗口的主要内容,如果未能解决你的问题,请参考以下文章

不使用导航控制器时弹出视图控制器?

请求 Google 日历权限时弹出额外授权

单击按钮时弹出关闭并重定向到不同的页面!

使用授权标头的react-native fetch有时会返回401

Vue | ElementUIVue离开当前页面时弹出确认框实现

切换标签时弹出键盘,破坏一切