本章我们将详细介绍 ASP.NET WebSecurity 对象
WebSecurity 对象 提供 ASP.NET Web Pages 应用程序的安全性和认证
通过 WebSecurity 对象,我们可以创建用户帐户,登录和注销用户,重置或者更改密码,以及其它更多与安全性相关的功能
WebSecurity 对象属性-下面有详细属性介绍
属性 | 描述 |
---|---|
CurrentUserId | 获取当前登录用户的 ID |
CurrentUserName | 获取当前登录用户的名称 |
HasUserId | 如果当前有用户 ID,则返回 true |
IsAuthenticated | 如果当前用户是登录的,则返回 true |
WebSecurity - CurrentUserId 属性
WebSecurity 对象的 CurrentUserId 属性是当前用户在 WebSecurity 数据库中的 ID(主键)
语法
WebSecurity.CurrentUserId
范例
C#
@{
int value;
value=WebSecurity.CurrentUserId;
}
<p>Current User ID is: @value</p>
VB
@Code
Dim value as Integer
value=WebSecurity.CurrentUserId
End Code
<p>Current User ID is: @value</p>
说明
CurrentUserId 属性是只读的
它不能通过代码更改
该属性用于识别 WebSecurity 数据库中用户资料表和会员表中的用户
错误和异常
如果当前没有用户登录,则 CurrentUserId 属性返回 -1
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - CurrentUserName 属性
WebSecurity 对象 CurrentUserName 属性是当前用户在 WebSecurity 数据库中用户资料表中的名称
语法
WebSecurity.CurrentUserName
范例
C#
@{
string value;
value = WebSecurity.CurrentUserId;
}
<p>Welcome @value</p>
VB
@Code
Dim value as String
value=WebSecurity.CurrentUserName
End Code
<p>Welcome @value</p>
说明
CurrentUserName 属性是只读的,不能通过代码更改
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - HasUserId 属性
WebSecurity 对象 HasUserId 属性是一个布尔值,指示当前用户在 WebSecurity 数据库中是否具有用户 ID
如果当前用户具有用户 ID,则该属性值是一个布尔值 true
默认是 false
语法
WebSecurity.HasUserId
范例
C#
@{
bool value;
value = WebSecurity.HasUserId;
}
<p>It is @value that the user has an ID</p>
VB
@Code
Dim value as Boolean
value=WebSecurity.HasUserId
End Code
<p>It is @value that the user has an ID</p>
说明
HasUserID 属性是只读的,不能通过代码更改
HasUserId 属性只验证用户是否在 WebSecurity 数据库中具有 ID
不验证用户帐户是否有效(被确认),或者用户是否已登录
你可以使用 IsConfirmed() 方法来验证用户是否已被确认
你可以使用 IsAuthenticated 属性来验证用户是否已登录
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity 属性 - IsAuthenticated
WebSecurity 对象 IsAuthenticated 属性是一个布尔值,指示当前用户是否已通过身份验证(已登录)
如果当前用户已通过身份验证,则该属性值是一个布尔值 true ,否则是 false
语法
WebSecurity.IsAuthenticated
范例
C#
if (!WebSecurity.IsAuthenticated)
{
Response.Redirect("~/Account/Login");
}
VB
if !WebSecurity.IsAuthenticated then
Response.Redirect("~/Account/Login")
end if
说明
IsAuthenticated 属性是只读的,不能通过代码更改
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity 对象方法
方法 | 描述 |
---|---|
ChangePassword() | 为指定的用户更改密码 |
ConfirmAccount() | 使用帐户确认令牌确认帐户 |
CreateAccount() | 创建一个新的用户帐户 |
CreateUserAndAccount() | 创建一个新的用户帐户 |
GeneratePasswordResetToken() | 生成一个密码重置令牌,可以在电子邮件中发送给用户以便用户可以重设密码 |
GetCreateDate() | 获取指定会员创建的时间 |
GetPasswordChangeDate() | 获取密码变更的日期和时间 |
GetUserId() | 根据用户名称获取用户 ID |
InitializeDatabaseConnection() | 初始化 WebSecurity 系统(数据库) |
IsConfirmed() | 检查用户是否已被确认。如果已确认,则返回 true。(例如,可通过电子邮件进行确认。) |
IsCurrentUser() | 检查当前用户的名称是否与指定用户名匹配。如果匹配,则返回 true |
Login() | 设置身份验证令牌,登录用户 |
Logout() | 移除身份验证令牌,注销用户 |
RequireAuthenticatedUser() | 如果用户未通过身份验证,则设置 HTTP 状态为 401(未经授权) |
RequireRoles() | 如果当前用户不是指定角色的成员,则设置 HTTP 状态为 401(未经授权) |
RequireUser() | 如果当前用户不是指定用户名的用户,则设置 HTTP 状态为 401(未经授权) |
ResetPassword() | 如果密码重置令牌是有效的,改变用户的密码为新密码 |
UserExists() | 检查指定的用户是否存在 |
WebSecurity - ChangePassword()
WebSecurity 对象 ChangePassword() 方法为指定的用户更改密码
语法
WebSecurity.ChangePassword( userName, oldPassword, newPassword )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
oldPassword | String | 用户的旧密码 |
newPassword | String | 新密码 |
返回值
类型 | 描述 |
---|---|
Boolean | 如果密码被更改,则返回 true,否则返回 false |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - ConfirmAccount() 方法
WebSecurity 对象 ConfirmAccount() 方法使用帐户确认令牌确认并激活帐户
语法
WebSecurity.ConfirmAccount( accountConfirmationToken )
参数
参数 | 类型 | 描述 |
---|---|---|
accountConfirmationToken | String | 帐户确认令牌 |
返回值
类型 | 描述 |
---|---|
Boolean | 如果帐户已确认,则返回 true,否则返回 false |
范例
C#
string message = "";
var confirmationToken = Request["confirmationCode"];
WebSecurity.Logout();if (!confirmationToken.IsEmpty())
{
if (WebSecurity.ConfirmAccount(confirmationToken))
{
message = "Registration confirmed";
} else {
message = "Could not confirm your registration";
}
}
VB
message = ""
confirmationToken = Request("confirmationCode")
WebSecurity.Logout()
if !confirmationToken.IsEmpty() then
if WebSecurity.ConfirmAccount(confirmationToken) then
message = "Registration Confirmed"
else
message = "Could not confirm your registration"
end if
end if
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
帐户确认令牌可通过 CreateAccount() 、 CreateUserAndAccount() 或 GeneratePasswordResetToken() 方法创建
一般过程是在电子邮件中向用户发送令牌,请求用户验证身份(通过一个指向确认页面的链接)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - CreateAccount() 方法
WebSecurity 对象 CreateAccount() 方法使用用户名和密码在用户数据库中创建一个新的帐户,并且可根据需要指定用户是否必须明确地确认帐户
语法
WebSecurity.CreateAccount( username, password, requireConfirmation )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
password | String | 用户密码 |
requireConfirmation | Boolean | 如果账户必须使用令牌返回值进行确认,则返回 true。默认返回 false |
返回值
类型 | 描述 |
---|---|
String | 可发送给用户进行帐户确认的令牌 |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
在下面的情况下, CreateAccount() 方法也抛出一个 MembershipCreateUserException 异常
- 用户名为空
- 用户名已经有一个会员帐户
- 密码为空
- 密码太长
- 数据库操作失败
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - CreateUserAndAccount()
WebSecurity 对象 CreateUserAndAccount() 方法使用用户名和密码在用户数据库中创建一个新的帐户,并且可根据需要指定用户是否必须明确地确认帐户
语法
WebSecurity.CreateUserAndAccount( username, password, propertyValues, requireConfirmation)
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
password | String | 用户密码 |
propertyValues | Object | 一个包含额外的用户属性的字典 |
requireConfirmation | Boolean | 如果账户必须使用令牌返回值进行确认,则返回 true 默认返回 false |
返回值
类型 | 描述 |
---|---|
String | 可发送给用户进行帐户确认的令牌 |
备注
CreateUserAndAccount() 方法在 WebSecurity 数据库中的用户资料表中创建一个新的入口,然后在会员表中创建一个匹配的入口
我们可以为 requireConfirmationToken 参数传递 true 来要求用帐户必须经过用户确认
如需确认帐户,则必须从 CreateUserAndAccount() 方法获得令牌作为返回值
如果想手动维护用户资料表,并且只想为用户创建会员表入口,请调用 CreateAccount() 方法
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
在下面的情况下, CreateUserAndAccount() 方法也抛出一个 MembershipCreateUserException 异常
- 用户名为空
- 用户名已经有一个会员帐户
- 密码为空
- 密码太长
- 数据库操作失败
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - GeneratePasswordResetToken() 方法
WebSecurity 对象 GeneratePasswordResetToken() 方法生成一个密码重置令牌,可以在电子邮件中发送给用户以便用户可以重设密码
语法
WebSecurity.GeneratePasswordResetToken(userName, expiration)
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
expiration | Integer | 令牌到期时间,以分钟计。默认是 1440(24 小时) |
返回值
类型 | 描述 |
---|---|
String | 一个重置令牌 |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
如果用户已忘记密码,请使用 ResetPassword() 方法
ResetPassword() 方法要求一个密码 重置令牌
确认令牌可通过 CreateAccount() 、 CreateUserAndAccount() 或 GeneratePasswordResetToken() 方法创建
密码可通过代码重置,但是一般过程是发送电子邮件给用户(带有令牌和指向页面的链接),这样用户就可以通过新的令牌确认新的密码
C#
@{
newPassword = Request["newPassword"];
confirmPassword = Request["confirmPassword"];
token = Request["token"];
if isPost{
// input testing is ommitted here to save space
retunValue = ResetPassword(token, newPassword);
}
}
<h1>Change Password</h1>
<form method="post" action="">
<label for="newPassword">New Password:</label>
<input type="password" id="newPassword" name="newPassword" title="New password" />
<label for="confirmPassword">Confirm Password:</label>
<input type="password" id="confirmPassword" name="confirmPassword" title="Confirm new password" />
<label for="token">Pasword Token:</label>
<input type="text" id="token" name="token" title="Password Token" />
<p class="form-actions">
<input type="submit" value="Change Password" title="Change password" />
</p>
</form>
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - GetCreateDate() 方法
WebSecurity 对象 GetCreateDate() 方法返回指定会员帐户创建的日期和时间
语法
WebSecurity.GetCreateDate( userName )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
返回值
类型 | 描述 |
---|---|
DateTime | 会员帐户创建的日期和时间 |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
如果帐户创建日期无效,则 GetCreatedDate() 方法返回 DateTime.MinValue
DateTime.MinValue 的值是 00:00:00.0000000, January 1, 0001
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity GetPasswordChangeDate()
WebSecurity 对象 GetPasswordChangeDate() 方法返回用户的密码最后更改的日期和时间
语法
WebSecurity.GetPasswordChangedDate( userName )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
返回值
类型 | 描述 |
---|---|
DateTime | 密码最后更改的日期和时间 |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
如果密码没有更改,则 GetPasswordChangeDate() 方法返回 DateTime.MinValue
DateTime.MinValue 的值是 00:00:00.0000000, January 1, 0001
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - GetUserId() 方法
WebSecurity 对象 GetUserId() 方法返回指定用户的 ID
语法
WebSecurity.GetUserId( userName )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
返回值
类型 | 描述 |
---|---|
Integer | 用户 ID |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
用户 ID 是存储在用户数据库中的用户信息的主键
它是用于在用户资料表和会员表中识别用户
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity -InitializeDatabaseConnection()
WebSecurity 对象 InitializeDatabaseConnection() 方法初始化 WebSecurity 数据库
该方法通过连接到包含用户和会员信息的数据库来初始化 WebSecurity 系统
语法
WebSecurity.InitializeDatabaseConnection( connectionString, userTableName, userIdColumn, userNameColumn, autoCreateTables )
参数
参数 | 类型 | 描述 |
---|---|---|
connectionString | String | 您的WebSecurity数据库的名称 |
userTableName | String | 包含用户资料信息的数据库表 |
userIdColumn | String | 包含用户 ID(主键)的数据库列 |
userNameColumn | String | 包含用户名的数据库列 |
autoCreateTables | Boolean | true 指示如果用户资料和会员表不存在则必须创建表,否则为 false |
返回值
无
说明
如果使用 SQL Server Compact, connectionString ** 应该是 WebSecurity 数据库的名称(不带 .sdf 文件扩展名)
否则它应该是在 Web 配置(web.config 文件)中的连接字符串的名称
即使 autoCreateTables 会强制数据库表被自动创建,但是前提是数据库本身必须已经存在
错误和异常
在下面的情况下, InitializeDatabaseConnection() 方法抛出一个 InvalidOperationException 异常
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - IsConfirmed() 方法
WebSecurity 对象 IsConfirmed() 方法返回一个指示指定用户是否已被确认的值
语法
WebSecurity.IsConfirmed( userName )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
返回值
类型 | 描述 |
---|---|
Boolean | 如果用户已被确认,则返回 true,否则返回 false |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
IsConfirmed() 方法检查由 userName 参数标识的用户帐户
如果会员已被确认(用户通过点击电子邮件链接进行帐户确认),则该方法返回 true
如果注册未被确认,则用户无法登录
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - IsCurrentUser() 方法
WebSecurity 对象 IsCurrentUser() 方法把提供的用户名与已登录用户的用户名进行比较
语法
WebSecurity.IsCurrentUser( userName )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 要比较的用户名 |
返回值
类型 | 描述 |
---|---|
Boolean | 如果 userName 匹配已登录用户,则返回 true,否则返回 false |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - Login() 方法
WebSecurity 对象 Login() 方法使用用户名和密码登录指定的用户
语法
WebSecurity.Login( userName, password, persistCookie )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
password | String | 用户密码 |
persistCookie | String | true 规定 cookie 中的身份验证令牌应该在当前会话结束后继续保留,否则为 false 默认是 false |
返回值
类型 | 描述 |
---|---|
Boolean | 如果用户已登录,则返回 true,否则返回 false |
范例
C#
if (WebSecurity.Login(username,password))
{
<p>Welcome</p>
}else{
<p>Incorrect username or password.</p>
}
VB
if WebSecurity.Login(username,password)
<p>Welcome</p>
else
<p>Incorrect username or password</p>
end if
说明
当用户已登录,ASP.NET 在 cookie 中设置一个身份验证令牌,让 ASP.NET 知道用户已登录的后续请求
如果 persistCookie 是 false,则令牌只有在用户关闭浏览器之前才是有效的
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - Logout() 方法
WebSecurity 对象 Logout() 方法用于注销当前用户
语法
Logout()
范例
C#
// 退出登录
WebSecurity.Logout();
// 跳转回主页
Response.Redirect("~/");
VB
'退出登录
WebSecurity.Logout()
'跳转回主页
Response.Redirect("~/")
参数
无
返回值
无
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
当用户已登录,ASP.NET 在 cookie 中设置一个身份验证令牌,让 ASP.NET 知道用户已登录的后续请求
Logout() 方法移除身份验证令牌,注销用户
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity RequireAuthenticatedUser
WebSecurity 对象 RequireAuthenticatedUser() 方法用于设置 HTTP 状态为 401(未经授权),如果如果当前用户未通过身份验证
语法
WebSecurity.RequireAuthenticatedUser()
参数
无
返回值
无
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
RequireAuthenticatedUser() 值验证当前用户是否已通过身份验证
如果当前用户未通过身份验证,则 HTTP 状态会设置为 401(未经授权)
要验证当前用户是否是指定的用户(通过 ID 或通过名称),请使用 RequireUser() 方法
要验证用户是否是角色中的成员,请使用 RequireRoles() 方法
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - RequireRoles() 方法
WebSecurity 对象 RequireRoles() 方法用于设置 HTTP 状态为 401(未经授权),如果当前用户不是所有指定角色的成员
语法
WebSecurity.RequireRoles(roles)
范例
C#
WebSecurity.RequireRoles("Admin", "Poweruser");
VB
WebSecurity.RequireRoles("Admin", "Poweruser")
参数
参数 | 类型 | 描述 |
---|---|---|
roles | String | 当前用户必须属于的角色列表,以逗号分隔 |
返回值
无
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
范例
RequireRoles() 验证当前用户是否是 所有 指定角色的成员
如果当前用户不是 所有 指定角色的成员,则 HTTP 状态会设置为 401(未经授权)
要验证当前用户是否已通过身份验证,请使用 RequireAuthenticatedUser() 方法
要验证当前用户是否是指定的用户,请使用 RequireUser() 方法
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - RequireUser() 方法
WebSecurity 对象 RequireUser() 方法用于设置 HTTP 状态为 401(未经授权),如果指定的用户未登录
语法
WebSecurity.RequireUser(userId)
或
WebSecurity.RequireUser(userName)
参数
参数 | 类型 | 描述 |
---|---|---|
userID | Integer | 用户 ID |
userName | String | 用户名 |
返回值
无
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
RequireUser() 验证当前用户是否是指定的用户
要验证当前用户是否已通过身份验证,请使用 RequireAuthenticatedUser() 方法
要验证用户是否是角色中的成员,请使用 RequireRoles() 方法
RequireUser() 只允许指定的用户访问网页,限制页面访问的建议方法是创建一个角色,并使用 RequireRoles() 方法来验证用户是否是该角色的成员
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - ResetPassword() 方法
WebSecurity 对象 ResetPassword() 方法使用密码令牌重置用户密码
语法
WebSecurity.ResetPassword( passwordResetToken, newPassword )
参数
参数 | 类型 | 描述 |
---|---|---|
passwordResetToken | String | 密码令牌 |
newpassword | String | 新密码 |
返回值
类型 | 描述 |
---|---|
Boolean | 如果密码已更改,则返回 true,否则返回 false |
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
说明
如果用户已忘记密码,请使用 ResetPassword() 方法
ResetPassword() 方法要求一个密码 重置令牌
确认令牌可通过 CreateAccount() 、 CreateUserAndAccount() 或 GeneratePasswordResetToken() 方法创建
密码可通过代码重置,但是一般过程是发送电子邮件给用户(带有令牌和指向页面的链接),这样用户就可以通过新的令牌确认新的密码
c#
@{
newPassword = Request["newPassword"];
confirmPassword = Request["confirmPassword"];
token = Request["token"];
if isPost {
// input testing is ommitted here to save space
returnValue = ResetPassword(token, newPassword);
}
}
<h1>Change Password</h1>
<form method="post" action="">
<label for="newPassword">New Password:</label>
<input type="password" id="newPassword" name="newPassword" title="New password" />
<label for="confirmPassword">Confirm Password:</label>
<input type="password" id="confirmPassword" name="confirmPassword" title="Confirm new password" />
<label for="token">Pasword Token:</label>
<input type="text" id="token" name="token" title="Password Token" />
<p class="form-actions">
<input type="submit" value="Change Password" title="Change password" />
</p>
</form>
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
WebSecurity - UserExists() 方法
WebSecurity 对象 UserExists() 方法指示用户是否已存在于 WebSecurity 数据库中
语法
WebSecurity.UserExists( userName )
参数
参数 | 类型 | 描述 |
---|---|---|
userName | String | 用户名 |
返回值
类型 | 描述 |
---|---|
Boolean | 如果用户已存在,则返回 true,否则返回 false |
说明
UserExists() 方法只验证用户是否已存在于用户资料表中
它 不会 为用户验证会员帐户是否已存在,或者用户是否已确认,或者用户是否已登录
错误和异常
在下面的情况下,任何对 WebSecurity 对象的访问将抛出一个 InvalidOperationException 异常
- InitializeDatabaseConnection() 方法没有被预先调用
- SimpleMembership 没有初始化(或者在网站配置中禁用)
命名空间
WebMatrix.WebData
Assembly
WebMatrix.WebData.dll
技术数据
名称 | 值 |
---|---|
Class | WebMatrix.WebData.WebSecurity |
Namespace | WebMatrix.WebData |
Assembly | WebMatrix.WebData.dll |
初始化 WebSecurity 数据库
在我们使用 WebSecurity 对象前,必须先创建或者初始化 WebSecurity 数据库
在我们的 Web 根目录下,创建一个名为 _AppStart.cshtml 的页面,如果已存在,则直接编辑页面
添加以下内容到文件中
@{
WebSecurity.InitializeDatabaseConnection("Users", "UserProfile","UserId", "Email", true);
}
上面的代码会在每次网站(应用程序)启动时运行
这些代码用于初始化 WebSecurity 数据库
- "Users" 是 WebSecurity 数据库(Users.sdf)的名称
- "UserProfile" 是包含用户配置信息的数据库表的名称
- "UserId" 是包含用户 ID(主键)的列的名称
- "Email" 是包含用户名的列的名称
- 最后一个参数 true 是一个布尔值表示如果用户配置表和会员表不存在,则会自动创建表如果不想自动创建表,应设置参数为 false虽然 true 表示自动创建数据库表,但是数据库不会被自动创建。所以数据库必须存在
WebSecurity 数据库
UserProfile 表为每个用户创建保存一条记录,用户 ID(主键)和用户名字(email)
UserId | |
---|---|
1 | john@johnson.net |
2 | peter@peterson.com |
3 | lars@larson.eut |
Membership 表包含会员信息,比如用户是什么时候创建的,该会员是否已认证,会员是什么时候认证的等等
UserId | CreateDate | ConfirmationToken | PasswordChange |
---|---|---|---|
1 | 12.04.2012 16:12:17 | NULL | AFNQhWfy.... |
忽略了一些列的显示
如果你想看到所有的列和内容,请打开数据库,看看里边的每个表
简单的会员配置
如果我们使用了 WebSecurity 对象,但有没有没有配置使用 ASP.NET Web Pages 会员系统 SimpleMembership ,可能会报错
如果托管服务提供商的服务器的配置与我们本地服务器的配置不同,也可能会报错
为了解决这个问题,请在网站的 Web.config 文件中添加以下元素
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>