【问题标题】:asp.net authentication - use credentials from web.config - problemasp.net 身份验证 - 使用来自 web.config 的凭据 - 问题
【发布时间】:2009-10-17 21:22:36
【问题描述】:

我有一个简单的问题让我头疼了几天。

我创建了非常简单的带有登录控制的应用程序。我将用户数据保存在 web.config 文件中:

<authentication mode="Forms">
    <forms name=".RzeskoLoginCookie">
        <credentials passwordFormat="Clear">
             <user name="test" password="test"/>
        </credentials>
    </forms>
</authentication>

我将把这个简单的网站部署到我不想使用 SQL Server 的计算机上的 IIS。

我的登录按钮事件如下所示:

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
{
    if(FormsAuthentication.Authenticate(Login1.UserName, Login1.Password))
    {
        FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
    }
}

现在的问题:

当我在内置网络服务器的 VS2008 上运行网站时,一切正常(我可以登录)。当我将我的网站复制到 IIS 时,我不断收到这个烦人的错误(在我点击登录按钮之后):

未能生成用户实例 SQL Server 由于失败 检索用户的本地 应用程序数据路径。请做出来 确保用户具有本地用户配置文件 在电脑上面。连接将 关闭。

我还观察到在我的 App_Data 文件夹中创建了一些奇怪的文件。

总结一下。我想要实现的是使用 web.config 文件中的用户凭据,而不使用 sql server。

感谢您的帮助

亲切的问候 PK

【问题讨论】:

    标签: asp.net authentication forms-authentication


    【解决方案1】:

    来自MSDN 登录控制页面:

    *

    登录控件使用成员资格 提供者获取用户凭据。 除非您另有说明,否则 登录控件使用默认 中定义的成员资格提供程序 Web.config 文件。指定一个 不同的提供者,设置 MembershipProvider 属性之一 定义的成员资格提供者名称 在应用程序的 Web.config 文件中。 有关详细信息,请参阅成员资格 提供者。

    *

    默认成员资格提供程序是 AspNetSqlProvider,它使用 SQL Server 数据库作为其用户存储。

    如果您想提供自定义身份验证例程,您可以编写自己的自定义 Membership 提供程序或处理 Login 控件的 OnAuthenticate 方法以提供您自己的身份验证逻辑。

    【讨论】:

    • 那为什么在测试服务器上一切正常?从 web.config 读取用户凭据?
    • 但是你指定什么提供者让它使用 web.config 中的凭据?
    【解决方案2】:

    如果您在代码中注意到,您有处理 &lt;asp:Login&gt; 控件的 LoggingIn 事件的方法声明:

    protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
    

    此控件与 ASP.NET Membership 提供程序接口,这可能是它寻找连接字符串的原因。

    因此,与其使用&lt;asp:Login&gt; 控件,不如简单地使用一个按钮并处理Click 事件,这样就不会使用Membership:

    <asp:Button id="LoginButton" Text="Login" OnClick="Login_OnClick" runat="server" />
    

    后面的代码(注意方法的不同签名):

    public void Login_OnClick(object sender, EventArgs args)
    {
        if(FormsAuthentication.Authenticate(Login1.UserName, Login1.Password))
        {
            FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
        }
    }
    

    【讨论】:

    • 它在可视化开发服务器上工作,但我在 IIS 中发布时仍然遇到同样的错误......它仍然尝试使用默认成员资格和 sqlprovider(并连接到 sql 数据库),甚至如果我像你一样使用我自己的活动。
    【解决方案3】:

    好的,感谢大家指出解决方案。 我终于设法通过创建自己的身份验证事件(与登录控件关联)来避免该错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多