在POST期间未经授权时重定向到登录视图

时间:2014-07-29 17:12:17

标签: asp.net-mvc-3 redirect post

我正在使用AuthorizeAttribute来确保当前用户未经授权时我的控制器操作不会运行。这适用于GET请求。如果用户未获得授权,则会将其重定向到登录视图。

但是,这不适用于POST请求,因为浏览器在POST期间不会被重定向。

普遍认同的解决方案是禁止用户在未经授权的情况下到达生成POST请求的应用程序部分。虽然这种逻辑是有道理的,但我认为它并不包含所有真实场景。

考虑在两个选项卡中打开Web应用程序。用户在两个选项卡中都已登录并获得授权,并且正在查看内容,这些内容在单击时可以发起POST请求。然后,用户从一个选项卡中签名并返回登录页面。另一个选项卡不知道此事件已发生。然后,用户从第二个选项卡发起POST请求。

如何在这种情况下优雅地将它们重定向到登录页面?

1 个答案:

答案 0 :(得分:1)

我相信你是不对的。我有一个自定义博客(仍需要大量工作),我使用Admin控制器上的[Authorize]属性。该控制器处理博客文章。

我测试了你的情景:

  1. 在我的帖子屏幕上打开两个浏览器屏幕
  2. 在第一个标签中退出
  3. 尝试在第二个标签上发帖
  4. 当它试图发布时,我将我重定向到登录屏幕。

      [Authorize]
      public class AdminController : BaseController
        {
    
            public ActionResult Post(int? id)
            {
                if (id != null)
                {
                    var blogPost = _blogService.RequestPost((int)id);
                    var blogPostViewModel = _blogPostViewModelMapper.CreateViewModel(blogPost);
                    return View(blogPostViewModel);
                }
                return View();
            }
    
            //
            // POST: /Post/
    
            [HttpPost]
            public ActionResult Post(BlogPostViewModel blogPost)
            {
                var stringTags = blogPost.Tags.Split(',');
                var tagIds = _blogTagMapper.MapStringsToIds(stringTags);
                blogPost.TagIds = tagIds;
                _blogService.SaveBlogPost(BlogPostlMapper.CreateEntity(blogPost));
    
                return RedirectToAction("Index", "Home");
            }
    
    }
    
相关问题