//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);
}
}
当这个代码在我的电脑上本地运行时,它可以很好地工作。我可以毫无问题地登录和注销,当我退出时我无法访问SystemController。正是我想要的。
但是当我在我的域名上发布网站时,由于某种原因我无法登录。它要求我在窗口内输入凭证:
我不明白为什么这个弹出窗口首先出现,其次我只希望用户使用常规<input type="text">
字段登录。
公共版本在数据库中具有完全相同的表和数据。这似乎没有错。
修改
可能是因为我在主机上没有使用SSL吗?
EDIT2:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
诀窍。显然你必须设置auth模式:)
答案 0 :(得分:1)
这是因为您在服务器上启用了基本身份验证或Windows身份验证。两者都会弹出该对话框。您只需要表单身份验证和匿名。