1

这可能是一个非常简单的问题,但我看不到解决方案,它真的开始困扰我!

我有一个简单的 ASP.Net MVC2 应用程序,它旨在作为一种学习辅助工具,要求用户通过提供用户名和密码登录。这些是使用成员资格提供程序对数据库进行身份验证的,该成员资格提供程序是使用 aspnet_regsql 工具创建和配置的。

Web 配置看起来像这样(我认为这是正确的......但是可能不确定表单身份验证位):

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2380"/>
</authentication>
<membership>
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
</profile>
<roleManager enabled="false">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
  </providers>
</roleManager>

视图中执行日志过程的代码如下所示:

public ActionResult LogOn()
{
    return View();
}

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid){
        if (MembershipService.ValidateUser(model.UserName, model.Password)){
            FormsService.SignIn(model.UserName, model.RememberMe);
            if (!String.IsNullOrEmpty(returnUrl)){
                return Redirect(returnUrl);
            }
            else{
                return RedirectToAction("Index", "Home");
            }
        }
        else{   
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

控制器中需要应用安全性的每个方法都被标记如下:

[Authorize]
public ActionResult New() {
  return View();
}

[Authorize]
[HttpPost]
public ActionResult New(FormCollection collection) {
    //do something...
}

我也标记了控制器类[Authorize]

但是,当我通过创建新项目或编辑现有项目来登录站点时,我在登录后很快就会退出。

控制器中的私有方法是否也需要标记,[Authorize]这会导致某人注销吗?

谢谢你的帮助,

莫里斯

4

0 回答 0