Membership.ValidateUser在1个项目中工作失败

时间:2013-02-13 03:18:07

标签: asp.net asp.net-membership

我有一个简单的CLI应用程序来创建/更新/删除SqlMembershipProvider的用户。它有效,我可以从CLI应用程序验证

但是,一旦我尝试从相关的asp.net应用程序执行此操作,它就会失败。我确实复制/粘贴了相关的web.conf / app.config部分,所以我不知道它为什么会失败。

<machineKey validationKey="C94FA3782AAF21E932CAA92DC2A0641951E3A76E50DD25B19C627BA01E259C6CBC7839A7803A59EF3BF855152369A6AB10CC259513BE7ACA4E842B962FD1D8A4"
                decryptionKey="2EA6D270AD94361ECFDCED5070D76FD67D9A147FEEBC8388FE9B73B450A04560"
                validation="SHA1"
                decryption="AES" />

    <membership defaultProvider="MembershipProvider">
      <providers>
        <add name="MembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
             connectionStringName="ApplicationServices" 
             enablePasswordRetrieval="false" 
             enablePasswordReset="true" 
             requiresQuestionAndAnswer="false" 
             requiresUniqueEmail="false" 
             maxInvalidPasswordAttempts="5" 
             minRequiredPasswordLength="1" 
             minRequiredNonalphanumericCharacters="0" 
             passwordAttemptWindow="10" 
             passwordStrengthRegularExpression=""/>
      </providers>
    </membership>

这是在web.config和app.config中,有人可以解释为什么这会在CLI项目而不是asp.net项目中验证吗?

要明确的是,这里的代码不是validationg

Membership.ValidateUser("fake", "fake") // actual test un/pwd combo

我已经确认un / pwd实际上是正确的。

1 个答案:

答案 0 :(得分:1)

在不了解有关您的应用程序的任何其他内容的情况下,最可能的问题似乎是配置文件中membership / providers / add节点中的applicationName属性。见http://msdn.microsoft.com/en-us/library/system.web.security.membership.applicationname.aspx

这些应用程序可能默认为单独的应用程序名称/标识符。因此,当您尝试通过Web应用程序登录时,提供程序仅会看到授予CLI应用程序的访问权限。 CLI应用程序可能无法访问Web根目录或虚拟路径信息(没有http上下文)来创建默认名称,因此它可能默认为与您的Web应用程序applicationName不同的内容。

请查看此链接以获得更好的解释:http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx

您可以通过两种方式处理此问题:

  • 尝试在两种配置中将applicationName设置为相同的字符串。

OR

  • 确保aspnet_Membership表中的用户“fake”有两个条目。一个用于CLI应用程序,一个用于Web应用程序。您应该找到aspnet_Application表中列出的每个应用程序的applicationID。

以下是有人在asp.net应用程序之外使用SqlMembershipProvider的另一个参考:http://mdrasel.wordpress.com/2011/02/01/asp-net-membership-provider-outside-of-web-application/。请注意applicationName属性的使用。