• ASP.NET Identity系列01,揭开神秘面纱


    早在2005年的时候,微软随着ASP.NET 推出了membership机制,十年磨一剑,如今的ASP.NET Identity是否足够强大,一起来体会。


    在VS2013下新建项目,选择"ASP.NET Web应用程序。",点击"确定"。

    选择"MVC"模版。

    创建的网站包括三个核心组件:

    1、Microsoft.AspNet.Identity.EntityFramework

    这是基于ASP.NET Identity的Entity Framework实现,用来持久化ASP.NET Identity数据和架构,以及负责和SQL Server数据库交互。

    2、Microsoft.AspNet.Identity.Core

    包含了ASP.NET Identity的核心接口,用来针对不同的持久层,比如Azure Table Storeage, NoSQL数据库等做不同的实现。

    3、Microsoft.AspNet.Identity.OWIN

    OWIN是一个安全中间件,Microsoft在此基础上作了再开发,如记录日志,产生cookie的时候用到。

    各组件的依赖关系如图:

    4

    F5运行项目。

    点击右上角的注册按钮,填写注册信息,点击"注册"按钮,新用户注册成功并呈登录状态。

    点击VS2013的"停止调试"按钮。

    存储的数据放在了哪呢?

    右键App_Data,点击"在文件资源管理器中打开文件",原来数据库被存放在项目文件夹App_Data下了。

    1

    如何查看这些数据呢?

    点击VS2013的左上角"服务器资源管理器",右键"DefaultConnection",从中可以查看所有的数据。

    2

    比如用户数据被存放在表"AspNetUsers"中。

    3

    点击"注册"按钮,是把请求交给了AcccountController的Register这个Action。

            [HttpPost]
    
            [AllowAnonymous]
    
            [ValidateAntiForgeryToken]
    
            public async Task<ActionResult> Register(RegisterViewModel model)
    
            {
    
                if (ModelState.IsValid)
    
                {
    
                    var user = new ApplicationUser() { UserName = model.UserName };
    
                    var result = await UserManager.CreateAsync(user, model.Password);
    
                    if (result.Succeeded)
    
                    {
    
                        await SignInAsync(user, isPersistent: false);
    
                        return RedirectToAction("Index", "Home");
    
                    }
    
                    else
    
                    {
    
                        AddErrors(result);
    
                    }
    
                }
    
                // 如果我们进行到这一步时某个地方出错,则重新显示表单
    
                return View(model);
    
            }
    

    以上,
    ● 通过ApplicationUser来实例化一个用户
    ● 通过UserManager的静态、异步方法CreateAsync创建用户
    ● 通过异步方法SignInAsync来让用户登录

            private async Task SignInAsync(ApplicationUser user, bool isPersistent)
    
            {
    
                AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    
                var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    
                AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
    
            }
    

    以上

    ● 所有验证的事交给了AuthenticationManager,负责登录登出
    ● 把创建ClaimsIdentity交给了UserManager

    至于登出,请求交给了AccountController的LogOff。

            [HttpPost]
    
            [ValidateAntiForgeryToken]
    
            public ActionResult LogOff()
    
            {
    
                AuthenticationManager.SignOut();
    
                return RedirectToAction("Index", "Home");
    
            }

    以上,还没有看到ASP.NET Idenity有多少过人之处,让时间来告诉我们。

  • 相关阅读:
    Android 按键消息处理Android 按键消息处理
    objcopy
    SQLite多线程读写实践及常见问题总结
    android动画坐标定义
    Android动画效果translate、scale、alpha、rotate
    Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/darrenji/p/4443069.html
Copyright © 2020-2023  润新知