使用websecurity登录仅适用于localhost

时间:2013-08-20 23:09:57

标签: asp.net-mvc-4

//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。正是我想要的。

但是当我在我的域名上发布网站时,由于某种原因我无法登录。它要求我在窗口内输入凭证:

Window

我不明白为什么这个弹出窗口首先出现,其次我只希望用户使用常规<input type="text">字段登录。

公共版本在数据库中具有完全相同的表和数据。这似乎没有错。

修改

可能是因为我在主机上没有使用SSL吗?

EDIT2:

<authentication mode="Forms">
   <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

诀窍。显然你必须设置auth模式:)

1 个答案:

答案 0 :(得分:1)

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