ASP.NET Membership - 第一部分
使用 VS 2005 / SQL Server 2005 设置 ASP.NET Membership Provider 的分步指南。
引言
许多 ASP.NET 开发者在设置 membership providers 和使用内置登录控件时会遇到问题。因此,这里有一个简单的操作指南/基本步骤,介绍如何使用 ASP.NET Membership 和 Login Controls 设置站点的注册和登录功能。
背景
需要对 ASP.NET 和 Visual Studio 2005 有一定的熟悉度。我会尽量简单说明。我的本地开发机安装了 VS2005、Microsoft SQL Server 2005 和 .NET Framework 2.0。首先,我们将在本地开发此 Web 应用程序,然后将其部署到 Web 主机。我们将使用 SqlMembershipProvider 和登录控件。
注意:下载的代码还包含了母版页的使用,这里没有提及。但当你查看代码时,很容易理解发生了什么。
设置站点 UI
- 启动 VS 2005。
- 创建一个新的 ASP.NET Web 应用程序 (文件 -> 新建 -> 项目 -> ASP.NET Web 应用程序 (C#)
- 添加两个新的 webForms - 分别是 login.aspx, Register.aspx
login.aspx
- 将一个 Login 控件从 VS 工具箱拖放到 login.aspx 上。
- 为刚添加的登录控件设置这两个属性:CreateUserUrl="~/Register.aspx" --- CreateUserText="新用户?在此注册!"
Register.aspx
- 将一个 CreateUserWizard(CUW) 控件拖放到 Register.aspx 上。
- 为刚添加的 CUW 设置这些属性
ContinueDestinationPageUrl="~/login.aspx" LoginCreatedUser="False"
Default.aspx
- 将 LoginStatus 和 LoginName 状态控件拖放到 Default.aspx 上。
Web.config
如下设置你的 web.config。稍后我会解释我们在里面做什么。
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings>
<remove name="LocalSqlServer"/>
<!--Replace yourConnectionString here with that which points to your database
e.g.
<add name="LocalSqlServer" connectionString="Data Source=.\SQLExpress;
Initial Catalog=TestDB;Integrated Security=SSPI;Persist Security Info=True"/>
-->
<add name="LocalSqlServer" connectionString="YourConnectionString"/>
</connectionStrings>
<system.web>
<compilation debug="false" />
<authentication mode="Forms">
<forms name=".TestAuth" loginUrl="~/login.aspx" defaultUrl="~/Default.aspx"></forms>
</authentication>
<authorization>
<deny users ="?"/>
</authorization>
<membership defaultProvider="MyAspNetSqlMembershipProvider">
<providers>
<clear/>
<add name="MyAspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="4"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
applicationName="/TestSiteApp"/>
</providers>
</membership>
</system.web>
<location path="Register.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>
connectionStrings
部分:我们在这里做的是移除可能默认存在于 machine.config 中的 connection string LocalServer 的任何引用,并添加一个新的。注意 YourconnectionString
。该值可能因指向你的数据库的连接字符串而异。
authentication
部分:我们在这里使用 Forms 身份验证。我们为身份验证 cookie 指定了一个名称,并设置了 loginUrl 和 defaultUrl 属性。没什么特别的。
authorization
部分:在这里,我们拒绝匿名用户访问。因此,他们将被重定向到我们在 loginUrl 中设置的登录页面。
membership
部分:首先,我们将 defaultProvider 属性设置为我们希望登录控件默认指向的提供程序的名称。我们使用 tag,所以它会移除 machine.config 中定义的任何 membership providers。然后添加我们的提供程序。你看,我们将其 name 设置为 MyAspSqlMembershipProvider 以便区分。你可以给出任何名称。然后我们有不同的设置,我不会深入探讨。但我建议你注意 applicationName 属性。强烈建议将此属性设置为一个唯一的名称。
location
部分:将 path 设置为 "Register.aspx",并将允许任何用户访问我们的 Register.aspx 页面。由于我们在 authorization 部分中提到了拒绝匿名用户访问我们的站点,因此我们需要明确说明这一点。
站点前端设置完毕。现在我们来看看如何设置数据库。
设置 Membership 数据库
我们将使用默认的 ASP.NET membership 数据库 schema。我将写一篇单独的文章介绍如何使用自定义 schema,其中将讨论如何编写自定义 membership provider。
- 在你的本地 SQL Server 2005 上创建一个空的数据库。例如 TestDB
- 运行 aspnet_regsql.exe,它位于 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\。 (这可能有所不同,但基本思路是它会位于你的 Windows 目录下,无论哪个驱动器。)
- 按照向导进行,直到到达步骤 - "选择服务器和数据库。"
- 在这里,根据你与 SQL Server 的设置,选择你的服务器和身份验证模式。
- 数据库 - 从下拉列表中,选择你在上面第 1 步中创建的数据库。
- 应该会显示成功消息。
在开发机上测试设置
注意:你必须在你的 web.config 中为这个新创建的数据库设置正确的连接字符串,如上所述。
所以,如果一切设置正确,我们可以继续测试到目前为止的工作。从 VS 2005 运行你的应用程序。你将被导向 login.aspx。现在还没有用户。所以首先点击 New User? 链接,你将被导向注册页面。创建一个新用户。用户成功创建后,你将再次被导向 login.aspx。现在使用你刚刚创建的用户登录。登录成功后,你将被带到 default.aspx。它将显示一个 LogOut 按钮和登录用户的姓名。
迁移到你的 Web 主机
为测试目的,我从 www.aspspider.com 获取了一个免费的 webhosting 账户。以下是我遵循的步骤:
- 首先,从 SQL Server 中分离我的数据库 TestDB.mdf,并通过他们的数据库上传功能将其上传到 Web 主机。
- 其次,我将上传的数据库附加到他们的 SQL Server 2005 Express。(注意:我的本地开发机上有 SQL Server 2005。)
- 将我的所有文件上传到主机。
- 在我的 web.config 中将连接字符串更改为 Web 主机公司为我的数据库提供的连接字符串。
- 测试站点,应该可以正常工作。
关注点
这些是非常基本的操作。没有什么花哨的,并且有一些高级文章你可以参考。如果遇到任何问题,请给我留言。我将写第二部分,介绍一些更高级的主题。
有用资源
- 设置数据库的截图:http://www.asp.net/learn/security/tutorial-04-vb.aspx
- 为什么总是要为 membership provider 设置 applicationName:http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx
- 免费 ASP.NET Web 主机:http://www.aspspider.com