当前位置: 首页 > news >正文

Restaurants WebAPI(四)——Identity


文章目录

  • 项目地址
  • 一、Authentication
    • 1.1 配置环境(解决类库包无法引用)
    • 1.2 使用Authentication控制Controller的访问
    • 1.3 获取User的Context
      • 1.3.1 在Application下创建User文件夹
        • 1. 创建`User.cs` record类封装角色信息
        • 2. 创建`UserContext.cs`提供接口给程序使用


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、Authentication

1.1 配置环境(解决类库包无法引用)

  1. Restaurants.Domain层安装
 <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.11" />
  1. Restaurants.Domain层的Entities文件夹下创建User实体
using Microsoft.AspNetCore.Identity;namespace Restaurants.Domain.Entities
{public class User:IdentityUser{}
}
  1. Restaurants.Infrastructure层的Persistence文件夹里DbContext继承改为 IdentityDbContext<User>

在这里插入图片描述

  1. 在Extensions里进行注册
 services.AddIdentityApiEndpoints<User>().AddEntityFrameworkStores<RestaurantsDbContext>();
  1. 在引入AddIdentityApiEndpoints时,一直无法引入,原因是:在类库项目中不能直接引用WebApplicationBuilder、ApplicationBuilder等类,这些类位于Microsoft.ASPNetCore程序集中,但是无法通过Nuget包引用

在这里插入图片描述

  1. 在程序入口注册服务
app.MapIdentityApi<User>();
  1. EF将User表写入数据库在类库Restaurants.Infrastructure
add-migration IdentityAdded
update-database
  1. 迁移成功后,数据库里就有了权限表
    在这里插入图片描述
  2. 发送一个post请求,注册一个用户

在这里插入图片描述

1.2 使用Authentication控制Controller的访问

  1. Restaurants.API层的Extensions文件夹 里注册服务

在这里插入图片描述

  1. 在需要添加验证的Controller类上面添加[Authorize],如果类里有不需要验证就可以访问的api,在该controller上添加[AllowAnonymous]

在这里插入图片描述
3. 设置成功后,当访问https://localhost:7044/api/restaurants/1报错401Unauthorized; 但是访问https://localhost:7044/api/restaurants可以获取所有restaurants的列表

1.3 获取User的Context

1.3.1 在Application下创建User文件夹

  • 创建User文件用来管理和获取权限中的User信息
    在这里插入图片描述
1. 创建User.cs record类封装角色信息
  • 将用户的Id, Email , Roles,封装到CurrentUser类里,并且通过IsInRole方法,检查用户的角色集合中是否包含指定的角色。返回true 或者 false
namespace Restaurants.Application.User
{public record CurrentUser(string Id, string Email, IEnumerable<string> Roles){public bool IsInRole(string role) => Roles.Contains(role);}
}
2. 创建UserContext.cs提供接口给程序使用
  • 从当前 HTTP 请求的上下文中获取用户的身份信息(CurrentUser),并提供一个接口 IUserContext 供应用程序使用。
  • 主要逻辑:
    1. 获取IHttpContextAccessor服务httpContextAccessor
    2. 通过httpContextAccessor服务获取到HttpContext的User信息
    3. 判断user信息,然后获取我们需要的内容
    4. 将需要内容 new一个CurrentUser

http://www.mrgr.cn/news/81025.html

相关文章:

  • AJAX与Axios
  • 嵌入式轻量级开源操作系统:HeliOS的使用
  • 若依启动项目时配置为 HTTPS 协议
  • 大厂 Java 架构师面试题全解析
  • 三维天地ELN助力职业卫生领域实验室无纸化、自动化
  • SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频
  • nodejs利用子进程child_process执行命令及child.stdout输出数据
  • LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读
  • 开源知识库open source knowledge base
  • 计算机毕业设计hadoop+spark知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习
  • 5G -- 网络安全
  • 【测试】APP测试
  • Go by Example学习
  • LeetCode 刷题笔记
  • qemu源码解析【06】qemu启动初始化流程
  • Ubuntu 22.04,Rime / luna_pinyin.schema 输入法:外挂词库,自定义词库 (****) OK
  • Docker 入门:如何使用 Docker 容器化 AI 项目(一)
  • ubuntu 安装更新 ollama新版本
  • CAD xy坐标标注(跟随鼠标位置实时移动)——C#插件实现
  • 备忘一个FDBatchMove数据转存的问题
  • 分析excel硕士序列数据提示词——包含对特征的筛选,非0值的过滤
  • Halcon单相机+机器人=眼在手上#标定心得
  • SQL进阶技巧:如何计算商品需求与到货队列表进出计划?
  • Linux Shell 脚本编程基础知识篇(一)
  • Restaurants WebAPI(三)——Serilog/FluenValidation
  • Jenkins