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

发布于 2024-08-07 21:28:18 字数 1073 浏览 4 评论 0原文

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

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

I have a simple problem which is giving me headaches for a couple of days.

I've created very simple application with login control. I keep user data in web.config file:

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

I will deploy this simple website to IIS on computer on which I do not want to use SQL Server.

My login button event looks like this:

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

Now the problem:

When I am running a website on VS2008 built in webserver, everything works fine (I can log in). When I copy my website to IIS I am constantly getting this annoying error (after I click Login button):

Failed to generate a user instance of
SQL Server due to failure in
retrieving the user's local
application data path. Please make
sure the user has a local user profile
on the computer. The connection will
be closed.

I also observed that in my App_Data folder some weird files are being created.

To sum up. What I want to achieve is to use user credentials from web.config file, without using sql server.

I'd appreciate any help

Kind Regards
PK

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你另情深 2024-08-14 21:28:18

MSDN 页面登录控制:

*

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

*

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

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

From the MSDN page for Login control:

*

The Login control uses a membership
provider to obtain user credentials.
Unless you specify otherwise, the
Login control uses the default
membership provider defined in the
Web.config file. To specify a
different provider, set the
MembershipProvider property to one of
the membership provider names defined
in your application's Web.config file.
For more information, see Membership
Providers.

*

The default Membership provider is the AspNetSqlProvider which uses a SQL Server database as its user store.

If you want to provide a custom authentication routine, you can either write your own custom Membership provider or handle the OnAuthenticate method of the Login control to provide your own authentication logic.

秋千易 2024-08-14 21:28:18

如果您注意到代码中存在用于处理 控件的 LoggingIn 事件的方法声明:

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)

该控件与 ASP.NET 会员资格提供程序交互,这可能就是它寻找的原因连接字符串。

因此,不要使用 控件,只需使用按钮并处理 Click 事件,这样就不会使用 Membership:

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

Code Behind(请注意该方法的不同签名):

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

If you notice in your code, you have the method declaration for handling the <asp:Login> control's LoggingIn event:

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)

This control interfaces with the ASP.NET Membership provider which is probably why it is looking for a connection string.

So rather than using the <asp:Login> control, simply use a button and handle the Click event so that there is no use of Membership:

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

Code behind (notice the different signature of the method):

public void Login_OnClick(object sender, EventArgs args)
{
    if(FormsAuthentication.Authenticate(Login1.UserName, Login1.Password))
    {
        FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
    }
}
傾城如夢未必闌珊 2024-08-14 21:28:18

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

Ok, thanks everybody for pointing out the solution.
I finally managed to avoid that error by creating my own authentication event (associated with the login control).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文