我正在使用MVC 3和FormsAuthentication:
<authentication mode="Forms">
<forms loginUrl="~/Account/" timeout="2880" />
</authentication>
我的帐户/索引页面显示一个登录页面,然后使用Jquery,它会在帐户/登录中发布一个帖子来验证用户身份。这是我处理它的AccountController操作:
[HttpPost]
[Authorize(Users = "*")]
public ActionResult Login(string userName, string password) {
...
}
发布到它的Jquery:
$.post("/account/login", {
"userName": $("#userName").val(),
"password": $("#password").val()
}, function (data) {
...});
所有上述工作,但现在我想限制对网站的一般访问,所以我将其添加到我的根web.config:
<authorization>
<deny users="?" />
</authorization>
为了尝试允许访问帐户控制器,我添加了这个:
<location path="~/Account">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
这是我的问题。我可以查看登录页面(帐户/索引),但我无法提交到帐户/登录。当我通过Fiddler观察正在发生的事情时,我会在发布到该页面时从服务器返回此文本:
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/?ReturnUrl=%2faccount%2flogin">here</a>.</h2>
</body></html>
似乎当我将“〜/ Account”添加到完整的授权用户列表时,它实际上并不像在非mvc项目中那样工作。在MVC 3中有没有一种特殊的方法呢?
答案 0 :(得分:6)
控制器的路径通常不作为相对路径引用。您应该只能说location =“Account”,例如
<location path="Account">
不能确定这是你的问题,因为我现在无法测试它,但它可能是......
答案 1 :(得分:2)
根本不要使用AuthorizeAttribute
进行登录操作。要求授权过程本身是没有意义的。
要求您创建所有控制器的授权
[Authorize]
public class AuthorizeController : Controller
{
}
并从AccountController
以外的所有控制器扩展。