//custom authorization
public class RedirectAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "NotExist" }));
}
}
}
[RedirectAuthorize]
public class SystemController : Controller
{
public ActionResult Index()
{
return View();
}
}
// this method is inside AccountController
[HttpPost]
public ActionResult Login(User acc)
{
if(ModelState.IsValid)
{
if(WebSecurity.Login(acc.username, acc.password))
return RedirectToAction("Index", "System");
}
ModelState.AddModelError("IncorrectDetails", "Wrong details. Please try again.");
return View(acc);
}
}
当此代码在我的 PC 上本地运行时,它可以完美运行。我可以毫无问题地登录和注销,并且在我注销时无法访问 SystemController。正是我想要的。
但是当我在我的域上发布站点时,由于某种原因我无法登录。它要求我在窗口内提供凭据:
我不明白为什么这个弹出窗口首先出现,其次我只是希望用户使用常规<input type="text">
字段登录。
公共版本在数据库中具有完全相同的表和数据。这似乎没有什么问题。
编辑:
可能是因为我没有在我的主机上使用 SSL?
编辑2:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
成功了。显然你必须设置身份验证模式:)