0
//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>

成功了。显然你必须设置身份验证模式:)

4

1 回答 1

1

这是因为您在服务器上启用了基本或 Windows 身份验证。两者都会弹出该对话框。您只需要表单身份验证和匿名。

于 2013-08-21T00:27:17.713 回答