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

react+antdpro+ts实现企业级项目二:Strapi及认证登陆模块

在上一章节中,我们已经成功创建并登陆了系统,现在需要为系统添加权限和登录认证,以提高系统的安全性、数据保护、个性化服务和用户体验。此外,添加权限和登录认证还可以方便管理员进行用户和授权管理。为了快速开发前端,建议使用Strapi来实现数据库构建、管理数据、简化开发。在本章节中,将会讨论如何添加权限和登录认证,并展示如何使用Strapi来简化这个过程。

一、关于Strapi

Strapi是一个开源的Node.js内容管理框架,它提供了一个可扩展的管理界面和API,使得开发者可以更加轻松地构建和管理自己的应用程序。对于前端开发者来说,使用Strapi的好处主要有以下几个:

  1. 简化后端开发:Strapi可以帮助前端开发者快速构建自己的后端API,这样就不必从头开始构建自己的后端应用程序,从而节省时间和精力。
  2. 管理数据:Strapi提供了一个可扩展的管理界面,可以方便地管理应用程序中的数据,例如添加、编辑、删除数据等。这对于前端开发者来说非常方便,可以让他们专注于前端开发,而不必担心后端管理。
  3. 与前端框架集成:Strapi支持与各种前端框架(例如React、Vue.js等)的集成,这使得前端开发者可以更加方便地使用Strapi构建自己的应用程序。

二、安装Strapi并启动

先使用 strapi 官网提供的脚手架初始化一个后端应用,注意此项目创建后默认新建的是SQLite数据库。

npx create-strapi-app@latest strapiBackend --quickstart


启动后浏览器会打开默认Strapi Admin页面并进入开发模式http://localhost:1337/admin/,在此页面创建一个管理员账户(可以随便起,但是一定要记住账密),为本项目的第一个管理用户。此后会登入管理页面。

注意: 如果服务没有自动启动,可以进入项目路径下 cd starpiBackend 运行以下命令 :npm run develop/ npm run start 。

对于Strapi,npm run develop和 npm run start这两个命令的区别如下:

  1. npm run develop:使用此命令启动Strapi应用程序时,它将在开发模式下运行。这意味着Strapi会自动重新加载应用程序代码以反映更改,并在终端输出日志信息,以便开发人员可以及时调试应用程序。此命令还将启动本地数据库,并将在控制台输出有关服务器和数据库的信息。该命令适用于在开发环境中使用Strapi。
  2. npm run start:使用此命令启动Strapi应用程序时,它将在生产模式下运行。这意味着Strapi会使用预编译的代码,并且不会自动重新加载应用程序代码。此命令还将使用配置文件中指定的数据库启动应用程序,并且不会在控制台输出过多的日志信息。该命令适用于在生产环境中使用Strapi。

登陆后的strapi主界面如下:

  1. 导航栏: 在Strapi主界面的顶部,有一个导航栏,其中包含了链接到主要功能区域的菜单,如Content-Types、Plugins、Settings等。导航栏还包括其他工具,例如文档、支持和用户资料。
  2. 仪表板: 在Strapi主界面中间,有一个仪表板,其中包含有关当前应用程序的一些信息和统计数据,例如数据库连接状态、API请求次数、文件存储使用情况等。
  3. Content-Types: Content-Types是Strapi应用程序的主要功能之一,它允许开发人员定义和管理应用程序中的数据结构,例如博客文章、用户信息等。在Content-Types模块中,开发人员可以创建、编辑、删除Content-Types,并定义Content-Types的属性和关系。
  4. Plugins: Strapi允许开发人员使用插件来扩展应用程序的功能。在Plugins模块中,开发人员可以查看已安装的插件列表、安装新插件、配置插件等。
  5. Settings: 在Settings模块中,开发人员可以配置应用程序的各种设置,例如电子邮件、安全、服务器、文本编辑器等。
  6. 用户资料: 在用户资料模块中,用户可以查看和编辑自己的资料信息,例如名称、电子邮件地址等。

三、配置数据结构(建表)

创建Content-type(数据表结构):Content-type用来创建数据结构,当创建一个新的项目,第一步就是建立数据结构。 注意: Content-type等同于数据库中的表,上述操作等同于在数据库内创建了一张包含username、email等各种字段的表。

3.1 User表

对于我们前端项目第一步需要实现登陆,即需要一个User的内容类型。启动Strapi内置一个User类型, 其中包含username、email等几个常用的字段,根据项目需要,可以增加字段如dept、dept_name、full_name等。具体操作步骤如下图所示。

3.2 建表

假如需要实现一个微博系统,那么最起码需要实现用户表、信息Message表、主题Topic表、图片Image表,且不同的表之间存在对应关系,一对多或多对一。

  • 一个用户可以发送多条信息:一对多
  • 一个话题下也可以有多条信息:一对多
  • 一条信息可以上传多张图片:一对多

如下图所示,创建好对应的Topic表及内部的字段topicId、title、desc等。同理创建好Message表

3.3 建立表关联

建立完 Message 表后,需要与 User 建立关系多对一对关联。

重复上述步骤可以建完所有表了,其中 Images 表和User表是不要建立的,因为用户和附件上传是通用功能,strapi 系统帮我们内置了,极大地加快了开发效率。

3.5 创建实体entry

创建实体entry 可以理解为往对应的表内插入数据。如下图所示,向message表内插入一条记录

插入数据后记得点击publish 发布出去,等同于将这个操作commit提交。

3.6 接口添加权限

数据准备好后,需要给其添加权限,否则数据暴露在接口外,容易引起安全问题。那么如何添加权限? Strapi的权限是通过给用户User分配角色Role,Role角色被赋予权限来实现的。

  • 创建两个Role,并给对应的表赋予CRUD增删改查的权限。

  • 其次创建两个User,并给用户赋权

  • 将Message赋予User

四、Postman模拟登陆及查询及校验权限操作

至此,基本的数据和角色权限已经建立,用户Strapi User 有两篇ID为1和2 的Message消息,且Strapi User被赋权canRead,可以对Message表进行读取操作。下面以postman模拟登陆并实现权限校验。

  • postman模拟登陆
// 模拟登陆
http://localhost:1337/api/auth/local// 传入identifier和password ,其中identifier为email或者username
{"identifier": "Strapi User","password":"xxxx"
}//取出结果如下,注意取得的jwt需要保存,后续接口权限调用需要
{"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNjc4MTk4MTY2LCJleHAiOjE2ODA3OTAxNjZ9.wO4w-CX3-mqp37MM4ugLzqFenifle2W9VbQ_3_Qu6mA","user": {"id": 1,"username": "Strapi User","email": "user@strapi.io","provider": "local","confirmed": true,"blocked": false,"createdAt": "2023-03-07T08:56:19.031Z","updatedAt": "2023-03-07T14:09:07.415Z","access": null,"full_name": null,"uni_id": null}
}

  • Strapi User查询数据
// 查询接口
http://localhost:1337/api/messages// 注意查询的API有鉴权,需要传入Authorization,具体值为 Bearer + 上面保存的jwt
Authorization : 'Bearer ' + jwt//取出结果如下图

  • Strapi User No 登陆

  • Strapi User No 查询

此时可以看到,未被赋权的Strapi User No 请求是被拒绝的。及权限校验成功。

五、总结

本文介绍了如何使用 strapi 来构建一个简单的权限校验系统。通过介绍建表、插入数据、增加用户、授权和校验等方面的内容,读者可以了解到 strapi 在实现权限校验方面的优势和应用场景。不同于传统的后端开发,strapi 提供了一种更加灵活、快速的后台配置方式,使得创建 API 接口变得十分容易。本系列文章点后续会在实际项目中应用 strapi ,结合企业级项目常用的技术栈 react、antdpro 和 typescript,可供读者参考。相信通过本文的介绍,读者已经对 strapi 有了一定的了解。

相关文章:

react+antdpro+ts实现企业级项目二:Strapi及认证登陆模块

在上一章节中,我们已经成功创建并登陆了系统,现在需要为系统添加权限和登录认证,以提高系统的安全性、数据保护、个性化服务和用户体验。此外,添加权限和登录认证还可以方便管理员进行用户和授权管理。为了快速开发前端&#xff0…...

Android ANR trace日志如何导出

什么是ANR ?上网搜索,一搜一大片,我就说个很容易识别的字眼,XXXAPP无响应 ANR trace日志如何导出?使用ADB命令: adb pull data/anr/trace.txt 你要存放的路径。查看ANR报错位置全局搜索你APP的包名&#x…...

Windows SSH 配置和SCP的使用

使用用户界面安装 ssh 功能 要在 Windows 10/11 上启用 SSH 服务器,请按照以下步骤操作: 按“Windows 键 I”打开“设置”菜单,然后选择“应用程序”。在左侧菜单栏中选择“应用和功能”。从列表中选择“可选功能”。 点击“添加功能”按钮…...

liunx 安装redsi和连接

liunx 安装redsi和连接 下载 (https://download.redis.io/releases/) 上传到 /usr/local目录 解压 tar -xvf redis-5.0.14.tar.gz 切换到 cd ./redis-5.0.14 编译 make 安装 make install 默认安装目录 /usr/local/bin/ 修改 ./redis-5.0.14/reds…...

接口里面可以写实现方法吗【可以】 、接口可以多继承吗【可以】

比如下面这道题: 问: 接口里面可以写方法吗? 答: 当然可以啊,默认就是抽象方法。 . 问: 那接口里面可以写实现方法吗? 答: 不可以,所有方法必须是抽象的。 . 问: 你确定吗&#xff1…...

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.57】引入可形变卷积

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列…...

统计学习--三种常见的相关系数

1)Pearson积差相关系数:用于量度两个变量X和Y之间的线性相关。它具有1和-1之间的值,其中1是总正线性相关性,0是非线性相关性,并且-1是总负线性相关性。Pearson相关系数的一个关键数学特性是它在两个变量的位置和尺度的…...

基于Django4.1.4的入门学习记录

基于Django4.1.4的入门学习记录Django创建Django项目创建工程工程目录说明运行开发服务器settings.py配置文件应用的创建创建应用模块应用模块文件说明App应用配置注册安装子应用数据模型ORM概述定义模型类生成数据库表查看数据库文件Admin管理工具管理界面本地化创建管理员注册…...

C++ Butterworth N阶滤波器设计

介绍一个 Butterworth Nth 滤波器设计系数的函数,像 Matlab 函数一样的: [bl,al]butter(but_order,Ws); 和 [bh,ah]butter(but_order,2*bandwidth(1)/fs,high);rtfilter 在 Ububtu 中,容易找到: $ aptitude search ~dbutterwo…...

UXP下不用任何框架创建自己的插件并试运行

在上一篇文章中《Windows下vue框架下的UXP插件开发环境搭建及程序试运行》,搭建的是利用vue框架进行开发的UXP开发环境,而且是把官方的案例插件直接添加进UDT,下面要说的是不利用任何js的框架创建和试运行自己的UXP插件程序,这样来…...

mac修改国内源快速安装brew

我是参考了清华源官网,有任何困惑直接访问该网址即可。这里给出精简版。 1. 更改镜像到~/.zshrc 终端添加方式 echo export HOMEBREW_API_DOMAIN"https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" >> ~/.zshrcecho export HOMEBREW_…...

Me-and-My-Girlfriend-1靶场通关

Me-and-My-Girlfriend-1靶场通关 靶机ip:192.168.112.135 信息收集 端口:22、80 还是从80WEB服务器端口入手 对服务器目录进行扫描,扫出以下目录 访问80端口WEB服务,显示一段文字只允许本地用户访问。 一眼伪造ip,查看页面…...

2.6 棋盘覆盖

在一个2*x2‘个方格组成的棋盘中,若怡有一个方格与其他方格不同,则称该方格为特殊方格,且称该棋盘为一特殊棋盘。显然,特殊方格在棋盘上出现的位置有 4种情形因而对任何k0,有4‘种特殊棋盘。图2-4 申的特殊棋益是12时 …...

JMU软件20 大数据技术复习(只写了对比18提纲的变动部分)

原博主 博客主页:https://xiaojujiang.blog.csdn.net/ 原博客链接:https://blog.csdn.net/qq_43058685/article/details/117883940 本复习提纲只适用于JMU软件工程大数据课程(ckm授课) 具体内容参考老师提纲的考纲,18和…...

MySQL底层存储B-Tree和B+Tree原理分析

1.B-Tree的原理分析 (1)什么是B-Tree B-树,全称是 Balanced Tree,是一种多路平衡查找树。 一个节点包括多个key (数量看业务),具有M阶的B树,每个节点最多有M-1个Key。 节点的key元素个数就是指这个节点能…...

基于Vue+Vue-cli+webpack搭建渐进式高可维护性前端实战项目

本文是专栏《手把手带你做一套毕业设计毕业设计》的实战第一篇,将从Vue脚手架安装开始,逐步带你搭建起一套管理系统所需的架构。当然,在默认安装完成之后,会对文件目录进行初步的细化拆分,以便后续功能迭代和维护所用。…...

第十三章:Java反射机制

第十三章:Java反射机制 13.1:Java反射机制概述 Java Reflection ​ Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 ​ 加…...

iLok USB不识别怎么办?

我的iLok USB坏了吗? 我的iLok USB没有被系统或软件识别。 如果您的iLok USB未被识别,问题可能出在iLok USB、iLok软件或受保护的软件。 提示如果您使用USB集线器,请确保您使用正确的集线器电源适配器。排除硬件:将iLok USB直接插…...

【LeetCode与《代码随想录》】二叉树篇:做题笔记与总结-JavaScript版

文章目录代码随想录144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102.二叉树的层序遍历226.翻转二叉树101. 对称二叉树104.二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数110.平衡二叉树257. 二叉树的所有路径404.左叶子之和513.找树左下角…...

机器人运动|浅谈Time Elastic Band算法

前言在自主移动机器人路径规划的学习与开发过程中,我接触到Time Elastic Band算法,并将该算法应用于实际机器人,用于机器人的局部路径规划。在此期间,我也阅读了部分论文、官方文档以及多位大佬的文章,在此对各位大佬的…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...