如何停止授权循环?

时间:2014-02-04 18:32:25

标签: c# asp.net-mvc authentication membership-provider

当我进入我的主页时,[授权]标签会将我重定向到登录页面(好!)。但在我输入凭据后,似乎只是刷新登录页面(不好!)。

家庭控制器:

[Authorize]
public class HomeController : Controller
{
    public  ActionResult Index()
    {
        return View();
    }
    //other code
}

帐户管理员:

[Authorize]
public class AccountController : Controller
{
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel loginModel, string returnUrl)
    {
        UserRoles userRoles = new UserRoles();
        UserRole userRole = userRoles.DbSet.FirstOrDefault(u => u.User == loginModel.UserName);

            if (ModelState.IsValid && Membership.ValidateUser(loginModel.UserName, loginModel.Password))
            {
                return RedirectToLocal(returnUrl);
            }

            ModelState.AddModelError("", "Bad login");            

           return View(loginModel);
    }
    //other code
}

修改1:

填写登录表单后,

loginModel会自动传入。

returnUrl是以前访问过的网址,在这种情况下,它是家庭控制器。默认情况下,它也是家庭控制器。

我认为问题可能是由于某种程度上没有将用户设置为已验证,因此当它返回到Home Controller时,[Authorize]标签会再次激活。你们觉得怎么样?

编辑2: 在Global.asax.cs中:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

此处没有自定义路由表,默认情况下一切都是。

在Web.Config中:

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

正确连接到我的登录功能。

会员身份验证有效,我已对其进行了测试。

1 个答案:

答案 0 :(得分:2)

试试这个:

if (ModelState.IsValid && Membership.ValidateUser(loginModel.UserName, loginModel.Password))
{
    FormsAuthentication.SetAuthCookie(loginModel.UserName, true);
    return RedirectToLocal(returnUrl);
}