MVC 3应用与ASP.网络会员提供商登录问题

本文关键字:提供商 登录 问题 网络 应用 ASP MVC | 更新日期: 2023-09-27 18:08:51

我似乎有一个不寻常的问题-

我以前使用过aspnet会员提供程序,没有任何问题,但这只是不适合我。

我已经通过向导将模式添加到sql server上的数据库。为了配置应用程序以供首次使用,我运行了一个脚本,用一些示例帐户、角色和其他信息填充数据库。

运行此脚本后,我可以使用新创建的用户名登录应用程序,使用功能等。然而,过了一段时间,或者如果我从任务栏关闭开发服务器,然后再次启动应用程序并尝试登录-它不会验证用户。第二个IF语句无法验证下面的用户和密码。

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/''"))
            {
                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);
}

如果我检查数据库,用户显然在那里,但是不正确的密码尝试字段仍然为0,这可能表明应用程序甚至不识别这些用户。此外,如果我检查网站的配置(VS2010 ->项目-> ASP。. NET配置),它显示有0个现有用户。

如果我重新运行应用程序,并再次运行安装脚本,我可以像以前一样登录,但是如果我重新启动并尝试再次登录,我会得到熟悉的错误密码/用户名屏幕。有时它发生在不同的端口号上,但有时端口号相同,它仍然会发生。

下面是设置脚本:

 protected void btnSetUp_Click(object sender, EventArgs e)
        {
            ModelContainer ctn = new ModelContainer();
            Membership.ApplicationName = "MyApp";
            Roles.ApplicationName = "MyApp";
            if (!Roles.RoleExists("Administrator"))
                Roles.CreateRole("Administrator");
            if (!Roles.RoleExists("User"))
                Roles.CreateRole("User");
            // Delete all existing users.
            //
            foreach (MembershipUser user in Membership.GetAllUsers())
            {
                Membership.DeleteUser(user.UserName, true);
            }

            // Create the master admin account.
            //
            if (Membership.GetUser("admin@MyApp.com") == null)
            {
                MembershipUser adminUser = Membership.CreateUser("admin@MyApp.com", "admin123");
                Roles.AddUserToRole("admin@MyApp.com", "Administrator");
            }
            CreateUser(ctn, "User@MyApp.com", "Joe Bloggs", "Employee", 1);

            ctn.SaveChanges();
        }
        private void CreateUser(ModelContainer ctn, string emailAddress, string Name, string type, int baseShop)
        {
            // Create the User.
            //
            if (Membership.GetUser(emailAddress) == null)
            {
                MembershipUser adminUser = Membership.CreateUser(emailAddress, "admin123");
                Roles.AddUserToRole(emailAddress, "User");
                User u = new User
                {
                    Name = Name,
                    Type = type,
                    BaseShop = baseShop,
                    Login = new Guid(adminUser.ProviderUserKey.ToString())
                };
                ctn.AddToUsers(u);
            }
        }

我的网页。Config或多或少是默认的所以我不确定它是否与之相关但无论如何它是:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <connectionStrings>
    <add name="ModelContainer" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=MyApp;User ID=**;Password=**;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
    <add name="ApplicationServices" connectionString="data source=localhost;initial catalog=MyApp;user id=**;password=**;" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      </assemblies>
    </compilation>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </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="MyApp" />
      </providers>
    </profile>
    <roleManager enabled="true">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="MyApp" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="MyApp" />
      </providers>
    </roleManager>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

发现很难描述这个问题,但它只是令人困惑。在使用asp.net成员提供程序时,我是否错过了一个步骤?其他人以前遇到过这个吗?

如有任何建议,我将不胜感激。

MVC 3应用与ASP.网络会员提供商登录问题

我认为问题是因为你在设置代码中使用了自己的自定义应用程序

Membership.ApplicationName = "MyApp";
Roles.ApplicationName = "MyApp";

而是你的网。配置使用默认名称

applicationName="/"