Ant Design Pro V5 与 IdentityServer 实现 Password 模式的登录
最近处于休息状态,想趁着休息时间,为自己做一个后台。
后端框架选用了 Abp。之前公司使用了一些自研的框架,但由于人力资源有限,后期框架的升级及维护都是比较耗时,这次干脆直接使用Abp,即省心又能快速上手写逻辑。
前端框架选用了 Ant Design Pro V5,前端已经很多很多年没有写过了,边学习边实践吧。
Password 模式
建议采用 authorization_code 的方式。github 有一些开源的 oidc 库, 方便前端使用。Oidc 方式有时间会写一下。
Abp
可以通过Cli 或者在线模板快速生成项目框架,创建为模块即可。
Identity Server
添加客户端
可以使用 IdentityServer Admin UI 作为管理工具,本文采用代码配置方式。
DbMigrator 项目配置文件增加
"Tech_Admin": {
"ClientId": "Tech_Admin",
"ClientSecret": "1q2w3e*",
"RootUrl": "http://localhost:8000"
},
Domain 项目,修改种子文件IdentityServerDataSeedContributor

//Admin Web Client
var adminWebClientId = configurationSection["Tech_Admin:ClientId"];
if (!webClientId.IsNullOrWhiteSpace())
{
var webClientRootUrl = configurationSection["Tech_Admin:RootUrl"].EnsureEndsWith('/'); await CreateClientAsync(
name: adminWebClientId,
scopes: commonScopes,
grantTypes: new[] {GrantType.ResourceOwnerPassword},
secret: (configurationSection["Tech_Admin:ClientSecret"] ?? "1q2w3e*").Sha256(),
redirectUri: $"{webClientRootUrl}signin-oidc",
postLogoutRedirectUri: $"{webClientRootUrl}signout-callback-oidc",
frontChannelLogoutUri: $"{webClientRootUrl}Account/FrontChannelLogout",
requirePkce: false,
corsOrigins: new[]
{
webClientRootUrl.RemovePostFix("/"),
}
);
}
Endpoint
可以参考官方文档
Token Endpoint — IdentityServer4 1.0.0 documentation
执行Migration
运行DbMigrator,生成初始化数据;EF Migration 也可以通过此执行,比较方便。可以配合 jenkins 做成数据库脚本自动化发布。
Ant Design
修改 LoginParams

type LoginParams = {
username?: string;
password?: string;
autoLogin?: boolean;
type?: string;
client_id?: string;
grant_type?: string;
client_secret?: string;
};
修改登录接口
记得对 client_id,grant_type,client_secret 赋值。

export async function login(body: API.LoginParams, options?: { [key: string]: any }) {
return request<API.LoginResult>('/account/connect/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;',
},
data: new URLSearchParams(body),
...(options || {}),
});
}
存储Token

const handleSubmit = async (values: API.LoginParams) => {
try {
// 登录
const msg = await login({ ...values, type });
if (msg.expires_in > 0) {
const defaultLoginSuccessMessage = intl.formatMessage({
id: 'pages.login.success',
defaultMessage: '登录成功!',
});
setAccessToken(msg.access_token);
message.success(defaultLoginSuccessMessage);
await fetchUserInfo();
/** 此方法会跳转到 redirect 参数所在的位置 */
if (!history) return;
const { query } = history.location;
const { redirect } = query as { redirect: string };
history.push(redirect || '/');
return;
}
console.log(msg);
// 如果失败去设置用户错误信息
setUserLoginState(msg);
} catch (error) {
const defaultLoginFailureMessage = intl.formatMessage({
id: 'pages.login.failure',
defaultMessage: '登录失败,请重试!',
});
message.error(defaultLoginFailureMessage);
}
};
至此已经实现了Token的存储,登录成功后,会获取用户信息,此处也需要进行修改,修改方式与修改Token 类似。
携 Token 调用Api (拦截器)
可以参考:https://pro.ant.design/zh-CN/docs/request
修改app.tsx,主要引用 import request from 'umi-request';

request.interceptors.request.use((url, options) => {
let token = localStorage.getItem('access_token');
if (null === token) {
token = '';
}
const authHeader = { Authorization: `Bearer ${token}` };
return {
url: url,
options: { ...options, interceptors: true, headers: authHeader },
};
});
结尾
至此,登录部分已经修改完毕,还是比较快速的。


Ant Design Pro V5 与 IdentityServer 实现 Password 模式的登录的更多相关文章
- Ant Design Pro V5 从服务器请求菜单(typescript版)
[前言] 找了很多Admin模板,最后还是看中了AntDesignPro(下文简写antd pro)这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro ...
- (二)React Ant Design Pro + .Net5 WebApi:前端环境搭建
首先,你需要先装一个Nodejs,这是基础哦.如果没有这方面知识的小伙伴可以在园子里搜索cnpm yarn等关键字,内容繁多,此不赘述,参考链接 一. 简介 1. Ant Design Pro v5 ...
- Ant Design Pro入门教程,安装,运行(V5 Typescript版)
[前言] 找了很多Admin模板,最后还是看中了AntDesignPro这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro.ant.design/in ...
- Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行
ant-design-pro ----> version :2.3.1 由于网上Ant Design Pro+Electron的资料太少,我就贡献一点经验 最近需要讲AntD Pro项目(以 ...
- ant design pro (十二)advanced UI 测试
一.概述 原文地址:https://pro.ant.design/docs/ui-test-cn UI 测试是项目研发流程中的重要一环,有效的测试用例可以梳理业务需求,保证研发的质量和进度,让工程师可 ...
- Ant Design Pro快速入门
在上一篇文章中,我们介绍了如何构建一个Ant Design Pro的环境. 同时讲解了如何启动服务并查看前端页面功能. 在本文中,我们将简单讲解如何在Ant Design Pro框架下实现自己的业务功 ...
- 阿里开源项目之Ant Design Pro
本篇文章主要包含的内容有三个方面. 第一.Ant Design Pro简介; 第二.Ant Design Pro能做什么; 第三.初步使用; 我相信通过这三个方面的讲解能让你大概知道Ant Desig ...
- ant design pro (十五)advanced 使用 API 文档工具
一.概述 原文地址:https://pro.ant.design/docs/api-doc-cn 在日常开发中,往往是前后端分离的,这个时候约定好一套接口标准,前后端各自独立开发,就不会被对方的技术难 ...
- ant design pro (十四)advanced 使用 CLI 工具
一.概述 原文地址:https://pro.ant.design/docs/cli-cn 为了更好以及高效的开发效率,我们提供了配套的 ant-design-pro-cli 工具. pro cli 提 ...
随机推荐
- 关于深搜dps
哈哈,我又来了! 但是!今天我又带来了让人开心到窒息的 ----深搜dps 其实关于深搜,概念没啥可讲的,总结一句话概括就是:一直往下搜,直到满足条件的,再回来,沿着下一条路搜,直到把路全走完为止.. ...
- Mybatis将mapper映射文件配置到recources下
关于为什么要将Mybatis的mappers.xml文件配置到resources目录下的粗浅看法: (1).使文件目录更加清晰.resources文件目录下通常为配置文件,所以将Mappers.xml ...
- logging 日志模块 configparser 配置文件
logging 模块 (copy博客) 详情浏览:http://www.cnblogs.com/linhaifeng/articles/6384466.html#_label12 函数式简单配置 im ...
- unicode decode error解决办法
在使用flask编写博客程序时候,遇到了这个错误. 解决办法如下 添加如下代码 from flask import Flask, render_template import sys reload(s ...
- sql注入之简要注入
#mysql简要注入流程 mysql注入简要流程如下图: 由于还没学习完先结合sqlilabs的第一关讲解信息收集的一部分和数据注入的information_schema的有据查询. #sqli-la ...
- OO第一单元
OO第一单元总结 目录 OO第一单元总结 前言 第一次作业 HW1基本思路 UML类图 代码规模 复杂度分析 方法复杂度 分析 类复杂度 分析 优化策略 第二次作业 HW2基本思路 UML类图 代码规 ...
- Linux C申请内存三种基本方式
一份代码可以知道具体方式和原理: int main() { int stack_a; int stack_b; static int static_c; static int static_d; in ...
- [MRCTF]XOR-无法生成反汇编的处理
主程序,无法生成伪代码 由此分为两种方法即: 直接看反汇编 解决问题,尝试生成伪代码 硬啃汇编 输入与输出 判断输入长度是否为0x1B,其中al为eax的低8位 将输入的字符每个与当前字符所在下标异或 ...
- springboot 设定访问项目的根路径
springboot的配置文件application.yml: spring.mvc.view.prefix : / spring.mvc.view.suffix : .html server: po ...
- MySQL使用日期列作为UNIQUE索引
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_extract https://dev.my ...