【问题标题】:Forms Authentication works on dev server but not production server (same SQL db)表单身份验证适用于开发服务器,但不适用于生产服务器(相同的 SQL 数据库)
【发布时间】:2010-02-07 04:42:48
【问题描述】:

我以前从来没有遇到过这个问题,我完全不知所措。

我有一个带有 ASP.NET Forms 身份验证、配置文件和角色的 SQL Server 2008 数据库,并且可以在开发工作站上运行。我可以毫无问题地使用创建的用户登录。

我在开发计算机上备份数据库并在生产服务器上恢复它。我将 DLL 和 ASP.NET 文件复制到服务器。我在 web.config 中进行了必要的更改,将 SQL 连接字符串更改为指向生产服务器数据库并上传。

我确保生成一个机器密钥,它在开发 web.config 和生产 web.config 上都是相同的。

然而,当我尝试登录生产服务器时,我能够在开发计算机上成功登录的同一用户在生产服务器上失败了。

数据库中还有其他内容,FluentNHibernate生成的schema。此内容可以在开发和生产服务器上成功查询。

这令人难以置信,我相信我已经验证了一切,但显然它仍然无法正常工作,我一定错过了一些东西。请问有什么想法吗?

【问题讨论】:

  • 尝试从两个地方的 web.config 中删除密钥...同样的问题?如果是这样,那么它仍然使用机器之间不同的 machine.config 值
  • 删除机器密钥并重新创建数据库还是删除机器密钥并重新登录?
  • 尝试删除 web.configs 中定义的键...看看行为是否有任何变化,很容易测试/回滚/尽早消除 :)
  • 如果您运行 SQL 分析器并跟踪数据库调用会怎样?执行的查询是否返回预期结果?

标签: asp.net asp.net-mvc asp.net-membership forms-authentication


【解决方案1】:

由于忘记在 web.config 中的成员资格提供程序元素下设置 applicationName 属性,我曾一度遇到类似症状的问题。

  <membership defaultProvider="SqlProvider">
    <providers>
      <clear />
      <add
        name="SqlProvider"
        applicationName="MyApplication"
        ...
        />
    </providers>
  </membership>

用户与特定应用程序相关联。由于我没有设置应用程序名称,它默认为应用程序路径(类似于“/MyApplication”)。当它移到生产环境时,路径发生了变化(例如更改为“/WebSiteFolder/SomeSubFolder/MyApplication”),因此应用程序名称默认为新的生产路径,并且无法与设置的原始用户帐户建立关联正在开发中。

你的问题可能和我的一样吗?

【讨论】:

  • 我不明白为什么要修复它,因为我有其他应用程序没有设置该属性,但它确实修复了它。非常非常感谢。
  • 我遇到了同样的问题,而您为我节省了数小时的时间来解决这个问题!谢谢! @Todd Brooks:可能您的其他应用程序在生产和开发方面具有相同的路径,这就是您之前没有遇到此问题的原因。
  • 两年半过去了,但仍然有意义。太棒了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多