关于微软自带的登陆中 Context.User 中的一些方法

最近公司写一个项目,用的是微软自带的登陆控件和数据库,在这其中需要用到一些东西,比如Context.User.IsInRole()方法总是返回false的问题,还有就是用户忘记密码,重置密码的问题。


1. Context.User.IsInRole()

这个方法需要在配置文件中配置一下

<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DBConnStr" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DBConnStr" applicationName="/"/>
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
</providers>
</roleManager>

这样就应该行了。当让数据库中的对应的权限表要录入数据

如果是自己写的登陆,数据库也没有用微软自带的数据库,也想要用Context.User那么就用如下的代码(这是我想出来的一种方法)

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //  登录的时候就这样写
            MyUser myUser = new MyUser() { UserName = "11", PassWord = "111", Role = "admin" };
            Context.User = myUser;
          
            Response.Write(Context.User.IsInRole("admin") + "   用户的名字是:" + Context.User.Identity.Name);
        }
    }


    public class MyUser : System.Security.Principal.IPrincipal
    {
        public string UserName { get; set; }
        public string PassWord { get; set; }
        public string Role { get; set; }


        public System.Security.Principal.IIdentity Identity
        {
            get { return new MyIdentity(UserName); }
        }


        public bool IsInRole(string role)
        {
            if (role == Role) return true;
            else return false;
        }
    }


    public class MyIdentity : System.Security.Principal.IIdentity
    {
        string name;


        public MyIdentity(string userName)
        {
            name = userName;
        }


        public string AuthenticationType
        {
            get { return null; }
        }


        public bool IsAuthenticated
        {
            get { return false; }
        }


        public string Name
        {
            get 
            {
                return name;
            }
        }
    }


这样就可以用Context.User中的属性和IsInRole方法了


2.关于重置密码的问题

微软有个自带的密码重置功能,有2中方法,一种是需要提供用户原来的密码,一种是不需要的,

1.如果有原来用户的密码,那么就可以ChangePassword就行了,

2.如果不知道密码但知道密码问题,可以MembershipUser.ResetPassword(string passwordAnswer)

3.如果不知道密码也不知道密码问题,可以参照 http://yimingzhi.net/2007/06/5267386a-5a0a-43c4-abf3-160249e7a1d7博客

但是当时我嫌那个方法太麻烦,所以就用了下面的方法

MembershipUser u = Membership.GetUser(userName);
                    bool lockUser = u.UnlockUser();
                    string s = u.ResetPassword();
                    u.ChangePassword(s, "123123");

这个方法也实现了重置密码的功能,主要是这句 bool lockUser = u.UnlockUser(); 起了关键性的作用,但是不知道有没有什么危害

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值