密码保护页面而不使用成员资格系统

时间:2015-08-17 09:51:37

标签: asp.net-mvc-5 password-protection

我有一个ASP.NET MVC 5 Web应用程序,运行得很好。

这是一个具有登录功能的网站,但仅供管理员使用(我)。 验证与会员系统(身份)一起运行,没关系。

另一方面,用户(匿名用户)可以在此网站中创建帖子。 当他们创建它时,他们填写密码字段,并且该密码与帖子相关联。

目标是只有知道相对密码的人才能编辑或删除此帖子。

没有身份验证(没有cookie),我只想让编辑和删除页面受密码保护。

问题: 如何在显示受保护内容之前构建我的视图和控制器以添加表单并对其进行验证?

我迷失在这里,我没有在互联网上找到任何帮助,因为这个案子不是公共的。

谢谢!

1 个答案:

答案 0 :(得分:1)

在编辑操作方法中添加一个名为password的额外参数,并从用户处获取密码。然后检查密码是否正确,让用户编辑帖子。在回发方法中再次检查密码,如果密码正确,则接受编辑。考虑这个例子:

public ActionResult Edit(int id, string password)
{
     if(_myPostManager.IsValidPassword(id,password))
     {
         var post=_myPostManager.Get(id);

         return View(new EditPostViewModel
             {ID=post.ID, Content=post.Content, Password=password});
     }
     return RedirectToAction("Error");
}

[HttpPost]
public ActionResult Edit(EditPostViewModel model)
{
    if (ModelState.IsValid)
    {
        // double check password
        if(_myPostManager.IsValidPassword(model.ID,model.Password))
        {
            // save your data to DB
            return RedirectToAction("Index");
        }
    }
    return View(model);
}

视图模型:

public EditPostViewModel
{
    public int ID{get;set;}
    public string Content {get;set;}
    public string Password {get;set;}
    // your other members
} 

并查看:

@model MyNamespace.EditPostViewModel
// inside your form element add a hidden filed and put password here
@Html.HiddenFor(model=>model.Password)
// your other fields

你也可以在会话中输入密码而不是传递给视图。或者加密密码并发送加密密码进行查看。