我有一个简单的问题让我头疼了几天。
我使用登录控件创建了非常简单的应用程序。我将用户数据保存在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
答案 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)
好的,谢谢大家指出解决方案。 我终于设法通过创建自己的身份验证事件(与登录控件相关联)来避免该错误。