ASP.NET学习记录(2019.04.28)

一、登录失败提示

        利用PlaceHolder控件我们可以实现一个简单的登录失败提示,具体操作如下:

<asp:PlaceHolder runat="server" ID="ErrorMessage" Visible="false">
    <p class="text-danger">
        <asp:Literal runat="server" ID="FailureText" />
    </p>
</asp:PlaceHolder>

        PlaceHolder控件可以用来在网页上占据一块空间,我们可以通过它动态添加控件,除了可以使用HTML脚本外,我们还可以在服务器上调用它们。Literal是个静态文本控件,用于显示文字内容,但无法将样式应用到该内容中。写入以上代码后,我们可以在后台直接调用“FailureText.Text”来设置信息文本,然后将Visible设置为true即可。

二、微软的登录验证思路

        巨硬在前几年公布了一个名为ASP.NET Identity的验证组件,大致使用思路如下:

1、判断页面验证是否通过,如果通过则:
{
	1.1、创建UserManager对象manager						// 用于管理用户信息
	1.2、创建新用户ApplicationUser对象					// 该对象由manager提供,manager通过用户输入的账号密码匹配符合条件的账户
	1.3、如果该用户信息存在,则:
	{
		1.3.1、将该用户设置为登录状态
		1.3.2、将页面跳转至登录页面的父页面
	} 
	否则:
	{
		1.3.3、设置FailureText为相应的提示信息
		1.3.4、将其Visible属性设置为true
	}
}

        实现起来的代码如下:

protected void LogIn(object sender, EventArgs e)
{
    if (IsValid)
    {
        // Validate the user password
        // Create a new user
        var manager = new UserManager();
        ApplicationUser user = manager.Find(UserName.Text, Password.Text);
        if (user != null)
        {
            IdentityHelper.SignIn(manager, user, RememberMe.Checked);
            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
        }
        else
        {
            FailureText.Text = "Invalid username or password.";
            ErrorMessage.Visible = true;
        }
    }
}

        在这里,开发者首先选择判断页面的验证是否通过,这是为了保证用户的输入时合法的。我们可以通过Page.Validate()方法手动进行验证,或者是让系统在开始处理窗体事务后自行验证,每次验证的结果都由页面上所有的验证控件来决定,只有在全部验证都通过后(即验证成功),IsVaild的值才为true。
        验证完毕后,创建一个UserManager对象,这个UserManager在我目前看来是整个Identity组件的核心,它的作用就是“Provides the APIs for managing user in a persistence store.”(提供一个用于在持久性存储空间中管理用户的API)。具体的文档内容在此:UserManager Class (Microsoft.AspNetCore.Identity) | Microsoft Docs 。同时创建的还有一个ApplicationUser对象,这个ApplicationUser在这个案例中是系统自己生成的用户类对象,系统自带的注释称“可以通过将更多属性添加到用户类来为用户添加用户数据”,它同时继承了一个名为IdentityUser的类,是IdentityUser 的默认实现,使用字符串作为主键,从使用情况来看,这个就是组件中用来记录用户信息的实体类了,与JavaWeb中提到的POJO类的概念有相似之处。
        真正让我感到好奇的是下面那个IdentityHelper类,这玩意儿不是Identity组件里预先准备好的,它放在了一个名为IdentityModels的cs文件里,不继承任何类,但它调用了IAuthenticationManager这个用于认证管理服务的接口,我很怀疑这部分是不是属于MVC中Model的功能,毕竟人家连名字都有个Model。百度和谷歌都没有给我答案,或许等进一步学完MVC后我就能知道了。
IdentityHelper

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值