1、获取当前登录用户ID
Membership.GetUser().ProviderUserKey;
上语句可用来获取当前登录用户的ID,在使用时注意调用System.Web.Security命名空间,只有这样才可以使用MemberShip。如:
using System.Web.Security;
protected void dvNewPost_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
e.Values["UserId"] = Membership.GetUser().ProviderUserKey;
}
上例的意思是将当前登录用户的ID插入到最新的记录中。
2、判断用户是不是登录
使用User.Identity.IsAuthenticated,该值是一个布尔值,如果用户已经登录(即通过身份验证),该值为true,否则为false。如:
protected void Page_Load(object sender, EventArgs e)
{
if (!User.Identity.IsAuthenticated)
Response.Redirect("Index.aspx");
}
上例的意思是如果用户没有登录(!User.Identity.IsAuthenticated = true, 注意前边有Not运算符!),则重定向到主页Index.aspx,即用户无法进入本页面。如果用户为登录用户,则本代码不执行,进入本页面。
3、判断用户是不是某角色用户
使用User.IsInRole("Admin")。User.IsInRole("Admin")是一个布尔值,如果用户是Admin角色,则返回true,否则返回false。如:
protected void Page_Load(object sender, EventArgs e)
{
if (!User.IsInRole("Admin"))
Response.Redirect("Index.aspx");
}
上例是一个网站管理员(Admin角色)专用页面的page_load事件。如果用户是网站管理员,则不执行代码,直接进入本网站管理员专用页面。如果用户不是网站管理员,则重定向到主页Index.aspx,无法进入本网站管理员专用页面。
4、当前登录用户的用户名
使用HttpContext.Current.User.Identity.Name获取
比如设置一个属性,获取当前用户名
public string CurrentUserName
{
get
{
string userName = "";
if (HttpContext.Current.User.Identity.IsAuthenticated)
userName = HttpContext.Current.User.Identity.Name;
return userName;
}
}
4、当前登录用户的IP地址
使用HttpContext.Current.Request.UserHostAddress获取
进入用户后台
FormsAuthentication.SetAuthCookie(strUserName, false);
Response.Redirect("../member/index.aspx", true);
获取用户的Profile和Membership信息
MembershipUser mu = Membership.GetUser(strUserName);
ProfileCommon p = Profile.GetProfile(strUserName);
修改用户的Profile信息
ProfileCommon p = Profile.GetProfile(strUserName);
p.MemberInfo.Name = trueName.Text;
p.Save();
修改用户密码
如果已知旧密码可用changepassword控件修改
如果不知道旧密码,又不需要RequiresQuestionAndAnswer,先在web.config中把Membership Provider的EnablePasswordReset设为"true",然后使用:
MembershipUser mu = Membership.GetUser(strUserName);
mu.ChangePassword(mu.ResetPassword(), tbPsw.Text);
即可修改密码
解除用户锁定
使用MembershipUser的UnlockUser方法可以解除锁定:
MembershipUser mu = Membership.GetUser(strUserName);
if (mu.IsLockedOut) mu.UnlockUser();
注意与IsApproved的区别,锁定是由用户错误操作造成,没有提供设置锁定的方法
设置用户状态
通过MembershipUser的IsApproved属性来设置:
MembershipUser mu = Membership.GetUser(strMember);
mu.IsApproved = true;//根据实际情况设置true或false
Membership.UpdateUser(mu);//需要手动更新数据库
角色
System.Web.Security.Roles
http://www.cnblogs.com/lvfei/archive/2010/03/04/1678656.html
if (!Roles.IsUserInRole("Administrator")) { throw new System.Security.SecurityException("对不起,你没有权限!"); }
membership 类创建用户 及 返回状态(MembershipCreateStatus)
使用membership创建用户是很方便的,可以使用MembershipCreateStatus来查看创建的结果
创建用户的语法:
MembershipCreateStatus CreatStatude;
Membership.CreateUser(UserName, pwd, EMail, “密码提示", "密码提示答案", true, out CreatStatude);
其中MembershipCreateStatus枚举分别由以下成员
成员名称 说明 DuplicateEmail 电子邮件地址已存在于应用程序的数据库中。 DuplicateProviderUserKey 提供程序用户键值已存在于应用程序的数据库中。 DuplicateUserName 用户名已存在于应用程序的数据库中。 InvalidAnswer 密码提示问题答案的格式设置不正确。 InvalidEmail 电子邮件地址的格式设置不正确。 InvalidPassword 密码的格式设置不正确。 InvalidProviderUserKey 提供程序用户键值的类型或格式无效。 InvalidQuestion 密码提示问题的格式设置不正确。 InvalidUserName 在数据库中未找到用户名。 ProviderError 提供程序返回一个未由其他 MembershipCreateStatus 枚举值描述的错误。 Success 创建用户成功。 UserRejected 因为提供程序定义的某个原因而未创建用户。
可以采用这样的语句来检查返回值状态
switch (CreatStatude)
{
case MembershipCreateStatus.DuplicateUserName:
CreatMessage="用户已经存在,请重新选择用户名";
break;
case MembershipCreateStatus.DuplicateEmail:
CreatMessage = "该邮件地址已经注册,请重新填写邮件地址";
break;
case MembershipCreateStatus.InvalidPassword:
CreatMessage = "密码的格式设置不正确";
break;
case MembershipCreateStatus.InvalidEmail:
CreatMessage = "电子邮件地址的格式设置不正确";
break;
case MembershipCreateStatus.InvalidAnswer:
CreatMessage = "密码提示问题答案的格式设置不正确";
break;
case MembershipCreateStatus.InvalidQuestion:
CreatMessage = "密码提示问题的格式设置不正确";
break;
case MembershipCreateStatus.InvalidUserName:
CreatMessage = "在数据库中未找到用户名";
break;
case MembershipCreateStatus.ProviderError:
CreatMessage = "服务器出错,请稍候重试";
break;
case MembershipCreateStatus.UserRejected:
CreatMessage = "因为提供程序定义的某个原因而未创建用户";
break;
case MembershipCreateStatus.Success:
CreatMessage = "";
break;
default:
CreatMessage = "服务器端有错误发生,请稍候重试";
break;
}