【问题标题】:Most non-hacky way to make a modal window popup when unauthorized to navigate to a page未经授权导航到页面时弹出模式窗口的最简单方法
【发布时间】:2017-12-18 05:17:05
【问题描述】:

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

我所做的是实现

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

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

有什么建议吗?

【问题讨论】:

    标签: javascript c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    用户不应进入未经身份验证和授权即可发布数据的页面!

    如果您的用户可以访问可以发布信息的表单(让我们使用用户个人资料页面),那么他们甚至应该在到达那里之前进行身份验证。例如,在您允许用户访问编辑个人资料页面之前将用户引导至登录页面。一旦他们进行了身份验证并且您检查了他们有权在特定页面上执行 POST,然后您将向他们展示表单。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2015-02-16
      • 1970-01-01
      • 2015-08-11
      相关资源
      最近更新 更多