asp.net身份验证 - 使用来自web.config的凭据 - 问题

时间:2009-10-17 21:22:37

标签: asp.net authentication forms-authentication

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

我使用登录控件创建了非常简单的应用程序。我将用户数据保存在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

3 个答案:

答案 0 :(得分:4)

从登录控件的MSDN页面:

*

  

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

*

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

如果要提供自定义身份验证例程,可以编写自己的自定义成员资格提供程序,也可以处理Login控件的OnAuthenticate方法,以提供自己的身份验证逻辑。

答案 1 :(得分:1)

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

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)

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

因此,不要使用<asp:Login>控件,只需使用按钮处理Click事件,以便不使用成员资格:

<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);
    }
}

答案 2 :(得分:0)

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