摆脱Login控件,自己定义登录操作

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
//在登录过程中,程序自动使用login.aspx进行拦截
//验证用户通过后,自动返回拦截的位置
if (Membership.ValidateUser(this.TextBox1.Text, this.TextBox2.Text))
{
this.Session["xh"] = this.TextBox1.Text;
FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text, false);

}
}

Membership用法详解

用户与角色管理在asp.net2.0中是通过Membership和Roles两个类来实现的。

Membership:用户成员账号管理,用户名、密码、邮箱等

Roles:负责用户和群组之间关系管理。

l          
Membership类:主要是创建用户帐号、验证用户身份和管理用户设置

属性:

1)         
EnablePasswordReset:获取一个值,以指示是否可以重置密码。

2)         
EnablePasswordRetrieval:获取一个值,以指示是否允许用户提取密码。

3)         
HashAlgorithmType:获取一个值,密码的算法识别项

4)         
MaxInvalidPasswordAttempts:获取一个值,锁定用户之间所允许的重试次数。

5)         
MinRequiredNonAlphanumericCharacters:获取一个值,密码中最少的特殊字符数。

6)         
MinRequiredPasswordLength:取得最小密码的长度

7)         
RequiresQuestionAndAnswer:获取一个值,指示是否要求用户解答密码问题以重新提取密码。

8)         
UserIsOnlineTimeWindow:指定用户最后活动日期之后的分钟数,其间的用户视为在线。

方法

1)         
CreateUser():创建新的用户

2)          DeleteUser():从数据库删除用户

3)         
GetUser():取得成员资格用户的信息

4)          UpdateUser():更新用户信息

5)         
ValidateUser():验证用户账号与密码是否用效

6)         
GetAllUsers():取得数据库中用户的集合

7)         
FindUsersByEmail():根据email查询用户

8)         
FinndUsersByName():根据帐号名称查询用户

9)         
GetNumberOfUsersOnline():取得目前访问程序的在线用户

10)      
GetUserNameByEmail():根据邮箱查询用户名

l          
MembershipUser类

负责管理与更新Membership表中的相关资料。别把MembershipUser类与Membership类混了,实际上是同MembershipUser处理完成后交由Membership处理。如:

1)         
取得或设置用户相关信息。如UserName,Email和帐号创建时间。

2)         
读取、改变用户密码

3)          改变密码提示问题与答案

4)         
解锁帐号

5)          设置是否允许用户能够被验证

属性:

1)         
CreationDate:取得用户的创建时间

2)         
Email:取得或设置用户的电子邮件地址

3)         
IsApproved:取得或设置用户是否可以进行验证

4)         
IsLockedOut:取出用户是否被锁定

5)          IsOnLine:指出用户目前是否在线

6)         
LastActivityDate:取得或设置用户最后一次验证或访问程序的日期时间

7)         
LastLoclkoutDate:取是最近锁定用户的日期和时间

8)         
LastLoginDate:取得或设置用户上一次验证的日期时间

9)         
LastPasswordChangedDate:取得用户密码上一次更新的时间

10)      
PasswordQuestion:取得用户的安全密码的问题

11)      
UserName:取得用户登录的名称

方法:

12)      
ChangePassword():更改用户密码

13)      
ChangePasswordQuestionAndAnswer:更改用户的密码安全问题和解答

14)      
GetPassword():取得用户密码

15)      
ResetPassword():将用户的密码重置,并自动产生新密码

16)      
UnlockUser():解除帐号锁定,以便能进行身份验证

l          
Roles类

方法:

1)         
AddUsersToRole():将多个用户加入一个角色

2)         
AddUsersToRoles():将多个用户加入多个角色

3)         
AddUserToRole():将一个用户加入一个角色

4)         
AddUserToRoles():将一个用户加入多个角色

5)         
CreateRole():创建角色

6)          DeleteRole():删除角色

7)         
FindUsersInRole():寻找某个角色中的所有用户

8)         
GetAllRoles():取得所有角色的清单

9)         
GetRolesForUser():取得用户所属角色的清单

10)      
IsUserInRole():指出用户是否在指定的角色中

11)      
RemoveUserFromRole():从一个角色中移除一个用户

12)      
RemoveUserFromRoles():从多个角色中移出一个用户

13)      
RemoveUsersFromRole():从一个角色中移除多个用户

14)      
RemoveUsersFromRoles():从多个角色中移除多个用户名

15)      
RoleExists():用户角色名是否已存在于角色表中。

代码实现(1)

创建用户:

MembershipCreateStatus
mc;

Membership.CreateUser(txtUid.Text, txtPwd.Text, txtEmail.Text,
txtQuestion.Text, txtAnswer.Text, true, out
mc);

Response.Write(mc.ToString());

删除用户:

if
(Membership.DeleteUser(txtUid.Text))

Response.Write("OK");

else

Response.Write("Error");

修改用户信息:

if
(User.Identity.IsAuthenticated)

{

MembershipUser user =
Membership.GetUser();

user.Email = txtEmail.Text;

Membership.UpdateUser(user);

Response.Write(user.Email.ToString());

}

验证用户登录信息

bool isok
= Membership.ValidateUser(txtUid.Text, txtPwd.Text);

if
(isok)

{

FormsAuthentication.SetAuthCookie(txtUid.Text,
false);

Response.Write("OK");

}

else

{

Response.Write("Error");

}

获取登录用户的信息

if
(User.Identity.IsAuthenticated)

{

MembershipUser myuser =
Membership.GetUser();

if (myuser != null)

{

 Response.Write(myuser.CreationDate);

 Response.Write(myuser.Email);

 Response.Write(myuser.IsLockedOut);

 Response.Write(myuser.IsOnline);

 Response.Write(myuser.PasswordQuestion);

 Response.Write(myuser.UserName);

}

}

根据密码问题的答案返回用户密码

if
(User.Identity.IsAuthenticated)

{

MembershipUser user =
Membership.GetUser(txtUid.Text);

txtPwd.Text =
user.GetPassword(txtAnswer.Text);

}

修改用户密码

if
(User.Identity.IsAuthenticated)

{

MembershipUser user =
Membership.GetUser();

user.ChangePassword(txtPwd.Text,txtPWd2.Text);

Response.Write(user.GetPassword(txtAnswer.Text));

}

解锁用户

MembershipUser
user = Membership.GetUser(txtUid.Text);

bool b =
user.UnlockUser();

Response.Write(b+"
"+user.IsLockedOut);

拒绝用户登录

MembershipUser user =
Membership.GetUser(txtUid.Text);

user.IsApproved =
false;

Membership.UpdateUser(user);

Response.Write(user.IsLockedOut);

允许用户登录

MembershipUser
user = Membership.GetUser(txtUid.Text);

user.IsApproved =
true;

Membership.UpdateUser(user);

Response.Write(user.IsLockedOut);

根据用户名或邮箱来检索用户

 MembershipUserCollection
users;

 switch(listType.Text)

 {

  case   
"姓名":

  users = Membership.FindUsersByName(txtFind.Text);

  if
(users.Count > 0)

  {

       
showUserInfo(users);

  }

  else

  {

       
Response.Write("未找到用户名");

  }

  break;

  case   
"邮箱":

  users = Membership.FindUsersByEmail(txtFind.Text);

  if
(users.Count > 0)

  {

       
showUserInfo(users);

  }

  else

  {

       
Response.Write("未找到邮箱");

  }

  break;

 }

代码实现(2)

加载所有用户

MembershipUserCollection
user = Membership.GetAllUsers();

listUser.DataSource =
user;

listUser.DataBind();

加载所有角色

string[] role =
Roles.GetAllRoles();

listRole.DataSource =
role;

listRole.DataBind();

添加新角色

Roles.CreateRole(txtRole.Text);

删除角色

Roles.DeleteRole(txtRole.Text);

将一个用户添加到一个角色

Roles.AddUserToRole(listUser.Text,
listRole.Text);

将一个用户从一个角色中移除

Roles.RemoveUserFromRole(listUser.Text,
listRole.Text);

将一个用户加入到多个角色中去

int n =
0;

foreach (ListItem li in listRole.Items)

{

if (li.Selected) n++;

}

string[] roles = new string[n];

int i=0;

foreach(ListItem li in listRole.Items)

{

if(li.Selected)

{

roles[i++] =
li.Text;

}

}

Roles.AddUserToRoles(listUser.Text, roles);

将一个用户的所有角色移除

string[]
str =
Roles.GetRolesForUser(listUser.Text);

Roles.RemoveUserFromRoles(listUser.Text,str);

将多个用户加入到一个角色中去

int n = 0;

foreach (ListItem li in
listUser.Items)

{

if (li.Selected)
n++;

}

string[] users = new
string[n];

int i=0;

foreach (ListItem li in
listUser.Items)

{

if
(li.Selected)

{

users[i++] =
li.Text;

}

}

Roles.AddUsersToRole(users,listRole.Text);

将一个角色中的所有的用户移除

string[]
users =
Roles.GetUsersInRole(listRole.Text);

Roles.RemoveUsersFromRole(users,
listRole.Text);

将多个用户加入到多个角色

int n = 0;

foreach (ListItem li in listUser.Items)

{

if (li.Selected) n++;

}

string[] strUser = new
string[n];

n = 0;

foreach (ListItem li in
listRole.Items)

{

if (li.Selected)
n++;

}

string[] strRoles = new
string[n];

for (int i = 0; i < listUser.Items.Count;
i++)

{

strUser[i] =
listUser.Items[i].Text;

}

for (int i = 0; i
< listRole.Items.Count; i++)

{

strRoles[i] = listRole.Items[i].Text;

}

Roles.AddUsersToRoles(strUser, strRoles);

1.创建用户...

string userName = txtUsername.Text;
       
string passWord = txtPassword.Text;
        string email =
txtEmail.Text;
        string passwordQuestion =
ddlPasswordQuestion.SelectedValue;
        string passwordAnswer =
txtPasswordAnswer.Text;
        MembershipCreateStatus result;
        //
创建一个用户       
        Membership.CreateUser(userName, passWord,
email, passwordQuestion, passwordAnswer, true, out result);
       
//显示创建结果,并做后期处理
        lblResults.Visible = true;
        switch
(result)
        {
            case MembershipCreateStatus.Success:
               
txtUsername.Text = "";
                txtPassword.Text =
"";
                txtEmail.Text = "";
               
ddlPasswordQuestion.SelectedIndex = -1;
               
txtPasswordAnswer.Text = "";
                lblResults.Text =
"新用户创建成功.";
                break;
            case MembershipCreateStatus.InvalidUserName:
               
lblResults.Text = "无效的用户名.";
                break;
            case MembershipCreateStatus.DuplicateEmail:
               
lblResults.Text = "重复的电子邮件地址.";
                break;
           
case MembershipCreateStatus.InvalidQuestion:
               
lblResults.Text = "无效的密码问题.";
                break;
           
case MembershipCreateStatus.DuplicateUserName:
               
lblResults.Text = "重复的用户名.";
                break;
            case MembershipCreateStatus.InvalidAnswer:
               
lblResults.Text = "无效的密码答案";
                break;
            case MembershipCreateStatus.InvalidEmail:
               
lblResults.Text = "无效的电子邮件地址";
                break;
           
case MembershipCreateStatus.InvalidPassword:
               
lblResults.Text = "无效的密码";
                break;
           
default:
                lblResults.Text =
"在创建用户过程中发生错误.";
                break;

}

 

转藏到我的图书馆 献花(0) +1 分享:
微信

QQ空间 QQ好友 新浪微博 推荐给朋友

来自: glxym
> 《asp.net》

以文找文   |   举报

上一篇:asp.net2.0安全性(Login系列控件)

时间: 2024-10-14 08:10:43

摆脱Login控件,自己定义登录操作的相关文章

【转】ASP.NET关于Login控件使用

原文如下: 今天上网找了一些关于Login控件的使用资料,遇到一个问题:Login控件本身具有不为空的验证,就是说当用户没有输入用户名或密码的时候,直接点提交不会通过验证,会在用户名和密码的后面出现“*”,意为必须输入的项.我想,如果我不想让它显示“*”,让显示“必须填写用户名”和“必须填写密码”的提示信息.上网找了半天,就是找不到我想要达到的效果.最后还是自己研究出来了.显示“*”是Login控件本身具备的特点,所以我选择了右键控件,选择“转换为模板”,这样Login就作为几个控件合在一起的组

Login控件尝试

新建web项目,添加default.aspx.Register.aspx.Login.aspx. default.aspx中添加LoginName.LoginStatus,LoginName的FormatString修改改变欢迎语.LoginStatus显示登录状态(未登录提示登录). Register.aspx 添加CreateUserWizard. Login.aspx中添加Login控件. 运行任意网站一次,添加web.config文件.在web.config中设置 <authentica

对话框控件绑定变量及操作

对话框控件绑定变量 右键单击控件,添加变量. 复选框:添加变量为控件变量.可以操作控件. 列表框:选择添加变量的控件的ID. 列表框:选择添加的变量的类别,Control为控件控制类型.Value为关联值变量,可以设置数据验证 编辑框:添加的控件变量名. 复选框:不选中,则为控件关联一个变量.不可以操作控件. 列表框:选择关联变量类型. 编辑框:添加的控件变量名.  头文件中添加的变量 // CMFCTestDlg dialog class CMFCTestDlg : public CDialo

javascript可编辑表格控件 支持全键盘操作

项目中经常会用到表格编辑控件,网上也有不少,但是确实没有完全符合我要求的, 自己写一个吧! 1.该控件支持 数据显示列,文本编辑列,选择列,下拉列,索引列,删除列 六种列类型 2.支持全键盘操作,自定义键位 包括:列焦点切换,行焦点切换,新建行,数据保存(默认 上,下,左,右 键操作) 3.丰富的事件,绝大多数的客户端操作都能触发无刷新后台事件 4.支持统计运算,可自定义运算插件 5.兼容 Ie,chorme,firefox等绝大多数主流浏览器 下载地址:http://files.cnblogs

自定义Imageview控件实现多种手势操作 (拖动、水平缩放、竖直缩放、等比例缩放、双击、长按)

项目中需要使用自定义控件的多种手势操作,之前在网上查阅资料的时候发现能找到的一般是只实现了其中的几种,这次就把我做的控件分享一下,人人为我,我为人人嘛,哈哈! 这个自定义控件实现的主要功能是控件的拖动和缩放(注意:不是对控件中的图片进行操作,话说很多帖子都把这两个混了),其中缩放可以按照三个方向进行,就是水平.竖直和等比例.双击操作只做了一个提示,长按加上了一个简单的弹出菜单. 抱歉的是没有足够的时间写详细注释了,如果跟你需要的功能相同就请直接调用,要是需要改代码就费点神自己读懂代码吧,看不懂的

Delphi的TListView控件拖放选定行操作

http://www.tansoo.cn/?p=401 Delphi的TListView控件拖放选定行操作的例子,效果图如下:TListView控件拖动选定行到指定位置 具体实现步骤: 一.新建一个Delphi工程,在窗体上放置一个TListView控件(在Win32面板),设置ListView1的属性: ViewStyle设置为vsReport DragMode设置为dmAutomatic RowSelect设置为True 二.添加ListView1的OnDragOver事件的响应代码: pr

XAF 框架中,自定义参数动作(Action),输入参数的控件可定义,用于选择组织及项目

XAF 框架中,如何生成一个自定义参数动作(Action),输入参数的控件可定义? 参考文档:https://documentation.devexpress.com/eXpressAppFramework/113183/Task-Based-Help/Actions/How-to-Customize-Action-Controls 示例 XAF 安装中带的 示例方案: Feature Center 默认安装在 :%PUBLIC%\Documents\DevExpress Demos 17.1\

关于asp:login控件和验证码的问题?(转)

1.验证码页面添加.2.将这验证码页面添加到login控件中:拖曳一Login控件,将之切换到模式下,在Html源文件中在表格中密码那行后添加: <tr>    <td style="width: 151px">        <asp:Label ID="Label1" runat="server" AssociatedControlID="Password">验证码:</asp:L

VC/MFC 使edit控件不能进行粘贴操作

[cpp] view plaincopy 这里使用消息拦截的方法 [cpp] view plaincopy BOOL PersonDlg::PreTranslateMessage(MSG* pMsg) { if (GetDlgItem(IDC_EDIT_USER_ID)->m_hWnd == pMsg->hwnd || GetDlgItem(IDC_EDIT_USER_NAME)->m_hWnd == pMsg->hwnd || GetDlgItem(IDC_EDIT_PHONE)