天天看点

第二十七讲 ASP.NET身份验证(二)

主要内容

    接上一节

    1. 当用户正常通过Login.aspx登陆页面正常登陆时,FormsAuthenticationFromLogin(string UserName,bool bl)方法却不知道指向何处时,页面就会报错?

    解决办法:

        判断页面地址栏的参数ReturnUrl是否为空

        如果不为空:则使用FormsAuthenticationFromLogin(string UserName,bool bl)方法。

        如果为空:则手动发送加密Cookie到客户端,再使用Response.Redirect()方法,定向到站点首页。

        如实现代码:

        if (tbName.Text.Trim() == "admin" && tbPwd.Text.Trim() == "123")

        {

            if (Request.QueryString["ReturnUrl"] != null)

            {

                this.Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "<script>alert('登陆成功')</script>");

                FormsAuthentication.RedirectFromLoginPage(tbName.Text.Trim(), chkRemember.Checked);

            }

            else {

                FormsAuthentication.SetAuthCookie(tbName.Text.Trim(), chkRemember.Checked);

                Response.Redirect("~/Admin/Index.aspx");

            }

        }

        else

        {

            this.Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "<script>alert('登陆失败')</script>");

        }

    2. 首页显示欢迎用户字符

        使用的是web.security空间下的User属性下的标识中的用户名,也就是地址栏中ReturnUrl变量的值。

        如:this.Label1.Text = User.Identity.Name;

    3. 注销

        即是将客户端的加密Cookie删除掉。

        如:

            FormsAuthentication.SignOut();

            Response.Redirect("~/Login.aspx");

    4. 讲解VS中的登陆相关的控件的使用

        1. LoginName 就是能显示登陆用户名,如前面的欢迎字符串的显示

        2. LoginStatus 就是登陆状态的操作,登陆、注销动作

        自已测试其它相关控件的使用

    5. web.config代码讲解:

    <syste.web>

        <authorization>//授权配置

            <deny users="?" />拒绝所有匿名用户

            <allow roles="admin" />允许admin角色

            <deny users="*" />拒绝所有用户

        </authorization>

    </syste.web>

    看上面的web.config文件中的授权代码,似乎有点问题,先是拒绝所有匿名用户,再允许admin角色的用户,最后是拒绝所有用户。

    其实这里没有问题的,只是要明白的是,授权的配置中的顺序是很重要的,系统总是按照从前向后逐条匹配方式,执行最先的匹配者。

    6. 常用的标签

        1. 自定义错误配置标签

        <customErrors mode="RemoteOnly"

        //on表示启用自定义错误

        //off表示禁用自定义错误

        //remoteOnly表示只显示远程客户机,本地调试显示正常错误

            defaultRedirect="ErrorPage.htm">

            <error statusCode="404"

            redirect="FileNotFound.htm" />//为对应错误状态码定向一个页面

            //特定错误的错误页,statusCode为状态码,404错误代表页面不存在。

        </customErrors>

        默认VS2010 中是没有这个标签的。