SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 後端篇(五): 數據表設計、使用 jwt、redis、sms 工具類完善註冊登錄邏輯

来源:https://www.cnblogs.com/l-y-h/archive/2020/07/07/13264307.html
-Advertisement-
Play Games

(1) 相關博文地址: SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(一):搭建基本環境:https://www.cnblogs.com/l-y-h/p/12930895.html SpringBoot + Vue + ElementUI 實現後臺管理 ...


(1) 相關博文地址:

SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(一):搭建基本環境:https://www.cnblogs.com/l-y-h/p/12930895.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(二):引入 element-ui 定義基本頁面顯示:https://www.cnblogs.com/l-y-h/p/12935300.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(三):引入 js-cookie、axios、mock 封裝請求處理以及返回結果:https://www.cnblogs.com/l-y-h/p/12955001.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(四):引入 vuex 進行狀態管理、引入 vue-i18n 進行國際化管理:https://www.cnblogs.com/l-y-h/p/12963576.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(五):引入 vue-router 進行路由管理、模塊化封裝 axios 請求、使用 iframe 標簽嵌套頁面:https://www.cnblogs.com/l-y-h/p/12973364.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(六):使用 vue-router 進行動態載入菜單:https://www.cnblogs.com/l-y-h/p/13052196.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 後端篇(一): 搭建基本環境、整合 Swagger、MyBatisPlus、JSR303 以及國際化操作:https://www.cnblogs.com/l-y-h/p/13083375.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 後端篇(二): 整合 Redis(常用工具類、緩存)、整合郵件發送功能:https://www.cnblogs.com/l-y-h/p/13163653.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 後端篇(三): 整合阿裡雲 OSS 服務 -- 上傳、下載文件、圖片:https://www.cnblogs.com/l-y-h/p/13202746.html
SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 後端篇(四): 整合阿裡雲 簡訊服務、整合 JWT 單點登錄:https://www.cnblogs.com/l-y-h/p/13214493.html

(2)代碼地址:

https://github.com/lyh-man/admin-vue-template.git

 

一、數據表設計

1、需求分析

(1)目的:
  由於此項目作為一個後臺管理系統模板,不同用戶登錄後應該有不同的操作許可權,所以此處實現一個簡單的菜單許可權控制。即不同用戶登錄系統後,會展示不同的菜單,並對菜單具有操作(增刪改查)的許可權。

(2)數據表設計(自己瞎搗鼓的,有不對的地方還望 DBA 大神不吝賜教(=_=)):
需求:
  一個用戶登錄系統後,根據其所代表的的角色,去查詢其對應的菜單許可權,並返回相應的菜單數據。

  整個設計核心可以分為:用戶、用戶角色(下麵簡稱角色)、菜單許可權(下麵簡稱菜單)。

思考一:
  一個用戶只擁有一個角色,一個角色可以被多個用戶擁有。
  一個角色可以有多個菜單,一個菜單可以被多個角色擁有。
  即 角色 與 用戶間為 1 對 多關係,角色 與 菜單 間為 多對多關係。
  所以可以在用戶表中定義一個欄位作為外鍵 關聯到 角色表。
  而角色表 與 菜單表 採用 中間表去維護。

思考二:
  一個用戶可以有多個角色,一個角色可以被多個用戶擁有。
  一個角色可以有多個菜單,一個菜單可以被多個角色擁有。
  即 菜單 與 角色 間屬於 多對多關係,用戶 與 角色間 也屬於 多對多關係。
  所以 用戶表 與 角色表間、角色表 與 菜單表間均可以採用 中間表維護。

為了避免使用外鍵,此處我均採用中間表對三張表進行數據關聯。

 

最終設計(三個主表,兩個中間表):
  用戶表 sys_user
  用戶角色表 sys_user_role
  角色表 sys_role
  角色菜單表 sys_role_menu
  菜單表 sys_menu

 

2、用戶表(sys_user)設計

(1)必須欄位:
  用戶 ID、用戶名、用戶手機號、用戶密碼。
其中:
  用戶手機號 作為用戶註冊、登錄的依據(用戶名也可以登錄)。
  用戶名為 用戶登錄後顯示的 昵稱。
  用戶密碼 需要密文存儲(此項目中 前端、後端均對密碼進行 MD5 加密處理)。

(2)數據表結構如下:

-- DROP DATABASE IF EXISTS admin_template;
--
-- CREATE DATABASE admin_template;

-- --------------------------sys_user 用戶表---------------------------------------
USE admin_template;
DROP TABLE IF EXISTS sys_user;
-- 用戶表
CREATE TABLE sys_user (
    id bigint NOT NULL COMMENT '用戶 ID',
    name varchar(20) NOT NULL COMMENT '用戶名',
    mobile varchar(20) NOT NULL COMMENT '用戶手機號',
    password varchar(64) NOT NULL COMMENT '用戶密碼',
   sex tinyint DEFAULT NULL COMMENT '性別, 0 表示女, 1 表示男',
   age tinyint DEFAULT NULL COMMENT '年齡',
   avatar varchar(255) DEFAULT NULL COMMENT '頭像',
   email varchar(100) DEFAULT NULL COMMENT '郵箱',
    create_time datetime DEFAULT NULL COMMENT '創建時間',
    update_time datetime DEFAULT NULL COMMENT '修改時間',
    delete_flag tinyint DEFAULT NULL COMMENT '邏輯刪除標誌,0 表示未刪除, 1 表示刪除',
   disabled_flag tinyint DEFAULT NULL COMMENT '禁用標誌, 0 表示未禁用, 1 表示禁用',
   wx_id varchar(128) DEFAULT NULL COMMENT '微信 openid(拓展欄位、用於第三方微信登錄)',
   qq_id varchar(128) DEFAULT NULL COMMENT 'QQ openid(拓展欄位、用於第三方 QQ 登錄)',
    PRIMARY KEY(id),
    UNIQUE INDEX(name),
    UNIQUE INDEX(mobile)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='系統用戶表';


-- 插入數據
INSERT INTO `sys_user`(`id`, `name`, `mobile`, `password`, `sex`, `age`, `avatar`, `email`, `create_time`, `update_time`, `delete_flag`, `disabled_flag`, `wx_id`, `qq_id`)
VALUES (1278601251755454466, 'superAdmin', '17730125031', 'e10adc3949ba59abbe56e057f20f883e', 1, 23, NULL, "m_17730125031@163.com", '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0, 0, NULL, NULL),
    (1278601251755451232, 'admin', '17730125032', 'e10adc3949ba59abbe56e057f20f883e', 1, 23, NULL, "m_17730125031@163.com", '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0, 0, NULL, NULL),
    (1278601251755456778, 'jack', '17730125033', 'e10adc3949ba59abbe56e057f20f883e', 1, 23, NULL, "m_17730125031@163.com", '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0, 0, NULL, NULL);

-- --------------------------sys_user 用戶表---------------------------------------

 

 

3、角色表(sys_role)設計

(1)必須欄位:
  角色 ID,角色名稱。
其中:
  角色名稱用於定位用戶角色。

(2)數據表結構如下:

-- DROP DATABASE IF EXISTS admin_template;
--
-- CREATE DATABASE admin_template;

-- --------------------------sys_role 角色表---------------------------------------
USE admin_template;
DROP TABLE IF EXISTS sys_role;
-- 系統用戶角色表
CREATE TABLE sys_role (
    id bigint NOT NULL COMMENT '角色 ID',
    role_name varchar(20) NOT NULL COMMENT '角色名稱',
   role_code varchar(20) DEFAULT NULL COMMENT '角色碼',
   remark varchar(255) DEFAULT NULL COMMENT '角色備註',
    create_time datetime DEFAULT NULL COMMENT '創建時間',
    update_time datetime DEFAULT NULL COMMENT '修改時間',
    delete_flag tinyint DEFAULT NULL COMMENT '邏輯刪除標誌,0 表示未刪除, 1 表示刪除',
    PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='系統用戶角色表';


-- 插入數據
INSERT INTO `sys_role`(`id`, `role_name`, `role_code`, `remark`, `create_time`, `update_time`, `delete_flag`)
VALUES (1278601251755451245, 'superAdmin', '1001', '超級管理員','2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755452551, 'admin', '2001', '普通管理員','2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755458779, 'user', '3001', '普通用戶','2020-07-02 16:07:48', '2020-07-02 16:07:48', 0);

-- --------------------------sys_role 角色表---------------------------------------

 

 

4、菜單許可權表(sys_menu)設計

(1)必須欄位:
  當前菜單 ID,父菜單 ID,菜單名,菜單類型,菜單路徑
其中:
  當前菜單 ID 與 父菜單 ID 用於確定菜單的層級順序。
  菜單類型 用於確定是否顯示在菜單目錄中(按鈕不顯示在菜單目錄中)。
  菜單路徑 用於確定最終指向的 組件路徑(使用 vue-route 進行路由跳轉)。
註:
  最外層 父菜單 ID 此處設置為 0,但不創建 ID 為 0 的數據。

(2)數據表結構如下:

-- DROP DATABASE IF EXISTS admin_template;
--
-- CREATE DATABASE admin_template;

-- --------------------------sys_menu 菜單許可權表---------------------------------------
USE admin_template;
DROP TABLE IF EXISTS sys_menu;
-- 系統菜單許可權表
CREATE TABLE sys_menu (
    menu_id bigint NOT NULL COMMENT '當前菜單 ID',
    parent_id bigint NOT NULL COMMENT '當前菜單父菜單 ID',
   name_zh varchar(20) NOT NULL COMMENT '中文菜單名稱',
   name_en varchar(40) NOT NULL COMMENT '英文菜單名稱',
   type tinyint NOT NULL COMMENT '菜單類型,0 表示目錄,1 表示菜單項,2 表示按鈕',
   url varchar(100) NOT NULL COMMENT '訪問路徑',
   icon varchar(100) DEFAULT NULL COMMENT '菜單圖標',
   order_num int DEFAULT NULL COMMENT '菜單項順序',
    create_time datetime DEFAULT NULL COMMENT '創建時間',
    update_time datetime DEFAULT NULL COMMENT '修改時間',
    delete_flag tinyint DEFAULT NULL COMMENT '邏輯刪除標誌,0 表示未刪除, 1 表示刪除',
    PRIMARY KEY(menu_id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='系統菜單許可權表';

-- 插入數據
INSERT INTO `sys_menu`(`menu_id`, `parent_id`, `name_zh`, `name_en`, `type`, `url`, `icon`, `order_num`, `create_time`, `update_time`, `delete_flag`)
VALUES (127860125171111, 0, '系統管理', 'System Control', 0, '', 'el-icon-setting', 0,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125172211, 127860125171111, '用戶管理', 'User Control', 1, 'sys/UserList', 'el-icon-user', 1,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125173311, 127860125171111, '角色管理', 'Role Control', 1, 'sys/RoleControl', 'el-icon-price-tag', 2,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125174411, 127860125171111, '菜單管理', 'Menu Control', 1, 'sys/MenuControl', 'el-icon-menu', 3,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),

    (127860125172221, 127860125172211, '添加', 'Add', 2, '', '', 1,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125172231, 127860125172211, '刪除', 'Delete', 2, '', '', 2,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125172241, 127860125172211, '修改', 'Update', 2, '', '', 3,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125172251, 127860125172211, '查看', 'List', 2, '', '', 4,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),

    (127860125173321, 127860125173311, '添加', 'Add', 2, '', '', 1,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125173331, 127860125173311, '刪除', 'Delete', 2, '', '', 2,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125173341, 127860125173311, '修改', 'Update', 2, '', '', 3,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125173351, 127860125173311, '查看', 'List', 2, '', '', 4,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),

    (127860125174421, 127860125174411, '添加', 'Add', 2, '', '', 1,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125174431, 127860125174411, '刪除', 'Delete', 2, '', '', 2,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125174441, 127860125174411, '修改', 'Update', 2, '', '', 3,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125174451, 127860125174411, '查看', 'List', 2, '', '', 4,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),

    (127860125175511, 0, '幫助', 'help', 0, '', 'el-icon-info', 1,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125175521, 127860125175511, '百度', 'Baidu', 1, 'https://www.baidu.com/', 'el-icon-menu', 1,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (127860125175531, 127860125175511, '博客', 'Blog', 1, 'https://www.cnblogs.com/l-y-h/', 'el-icon-menu', 2,'2020-07-02 16:07:48', '2020-07-02 16:07:48', 0);

-- --------------------------sys_menu 菜單許可權表---------------------------------------

 

 

5、中間表設計(sys_user_role、sys_role_menu)

(1)設計原則:
  中間表存儲的是相關聯兩表的主鍵。

(2)用戶角色表如下:

-- DROP DATABASE IF EXISTS admin_template;
--
-- CREATE DATABASE admin_template;

-- --------------------------sys_user_role 用戶角色表---------------------------------------
USE admin_template;
DROP TABLE IF EXISTS sys_user_role;
-- 系統用戶角色表
CREATE TABLE sys_user_role (
    id bigint NOT NULL COMMENT '用戶角色表 ID',
    role_id bigint NOT NULL COMMENT '角色 ID',
   user_id bigint NOT NULL COMMENT '用戶 ID',
    create_time datetime DEFAULT NULL COMMENT '創建時間',
    update_time datetime DEFAULT NULL COMMENT '修改時間',
    delete_flag tinyint DEFAULT NULL COMMENT '邏輯刪除標誌,0 表示未刪除, 1 表示刪除',
    PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='系統用戶角色表';


-- 插入數據
INSERT INTO `sys_user_role`(`id`, `role_id`, `user_id`, `create_time`, `update_time`, `delete_flag`)
VALUES (1278601251755452234, '1278601251755451245', '1278601251755454466', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755453544, '1278601251755452551', '1278601251755451232', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755454664, '1278601251755458779', '1278601251755456778', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0);

-- --------------------------sys_user_role 用戶角色表---------------------------------------

 

 

(3)角色菜單表如下:

-- DROP DATABASE IF EXISTS admin_template;
--
-- CREATE DATABASE admin_template;

-- --------------------------sys_role_menu 系統角色菜單表---------------------------------------
USE admin_template;
DROP TABLE IF EXISTS sys_role_menu;
-- 系統角色菜單表
CREATE TABLE sys_role_menu (
    id bigint NOT NULL COMMENT '角色菜單表 ID',
    role_id bigint NOT NULL COMMENT '角色 ID',
   menu_id varchar(20) NOT NULL COMMENT '菜單 ID',
    create_time datetime DEFAULT NULL COMMENT '創建時間',
    update_time datetime DEFAULT NULL COMMENT '修改時間',
    delete_flag tinyint DEFAULT NULL COMMENT '邏輯刪除標誌,0 表示未刪除, 1 表示刪除',
    PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='系統角色菜單表';


-- 插入數據
INSERT INTO `sys_role_menu`(`id`, `role_id`, `menu_id`, `create_time`, `update_time`, `delete_flag`)
VALUES (1278601251755461111, '1278601251755451245', '1278601251755451111', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755461112, '1278601251755451245', '1278601251755452211', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755461113, '1278601251755451245', '1278601251755453311', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755461114, '1278601251755451245', '1278601251755454411', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755461115, '1278601251755451245', '1278601251755452221', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755461116, '1278601251755451245', '1278601251755452231', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755461117, '1278601251755451245', '1278601251755452241', '2020-07-02 16:07:48', '2020-07-02 16:07:48', 0),
    (1278601251755461118, '1278601251755451245	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一篇 前端 瀏覽器所在客戶端信息,有瀏覽器信息後,以下是區分手機的詳細類型 雖然沒難度,但是記錄下來,方便後續無腦複製: 蘋果APP類型 1 // iOS 2 isIPhone = (userAgent: string) => /iphone/i.test(userAgent); 3 isIPod ...
  • 什麼是建造者模式 經典建造者模式的優缺點 對建造者模式的擴展 什麼是建造者模式 建造者模式將一個複雜的對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。創建者模式隱藏了複雜對象的創建過程,它把複雜對象的創建過程加以抽象,通過子類繼承或者重載的方式,動態的創建具有複合屬性的對象。 雖然與 ...
  • Java容器 集合是一種存儲數據的容器,是Java開發中使用最頻繁的對象類型之一. 或許提起Collection,都會第一時間意識到List和Set以及Map等相關關鍵詞。因為這幾乎是我們日常開發里接觸最多和遇見最頻繁的,以及與數據處理交互最多的Java對象類型。換句話說,就是我們與數據進行處理的數 ...
  • 負載均衡: 一聽這詞很多小伙伴嚇壞了,前人就喜歡搞一些看起來很高大上的詞,好讓後生望而敬畏.那我們一起來捋一捋. 負載就是負擔. 均衡就是平均分.這樣 一說就是負擔平均分. 伺服器也要減減壓 我們都知道伺服器是第三產業,服務行業,客戶來了,你不能不服務.客戶少還行,客戶多了一臺伺服器就頂不住了,怎麼 ...
  • 1 前言 經過《Maven一鍵部署Springboot到Docker倉庫,為自動化做準備》,Springboot的Docker鏡像已經準備好,也能在Docker上成功運行了,是時候放上Kubernetes跑一跑了。這非常簡單,一個yaml文件即可。 2 一鍵部署Springboot 2.1 準備ya ...
  • 一、複數和虛數類型 1.C語言有三種複數類型:float _Comples,double _Complex,long double _Complex float_complex類型的應包含兩個float類型的值,分別表示實部和虛部。 類似的C語言的三種虛數類型為1float _Imaginary,d ...
  • 1:IDEA安裝教程 開始安裝Idea,點擊next 點擊Browse選擇好安裝文件夾,點擊next 根據電腦選擇幾位,我的電腦是64位選擇64bit,Update PATH variable:是否將IDEA啟動目錄添加到環境變數中,即可以從cmd命令行中啟動IDEA,根據需要勾選 點擊Instal ...
  • shell之ping減少時間間隔&ping的次數 作為一位新手,檢測IP地址是否正常使用,ping是一個很不錯的選擇,可以更快的探測到當前網路的可用IP,併進行到文檔。 步驟如下: 首先:創建一個腳本文件併進行編輯: 1 # vim ping.sh 然後:寫入腳本,內容如下: #!/bin/bash ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...