最近处于休息状态,想趁着休息时间,为自己做一个后台。

后端框架选用了 Abp。之前公司使用了一些自研的框架,但由于人力资源有限,后期框架的升级及维护都是比较耗时,这次干脆直接使用Abp,即省心又能快速上手写逻辑。

前端框架选用了 Ant Design Pro V5,前端已经很多很多年没有写过了,边学习边实践吧。

Password 模式

建议采用 authorization_code 的方式。github 有一些开源的 oidc 库, 方便前端使用。Oidc 方式有时间会写一下。

Abp

可以通过Cli 或者在线模板快速生成项目框架,创建为模块即可。

开始 | ABP.IO

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 模式的登录的更多相关文章

  1. Ant Design Pro V5 从服务器请求菜单(typescript版)

    [前言] 找了很多Admin模板,最后还是看中了AntDesignPro(下文简写antd pro)这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro ...

  2. (二)React Ant Design Pro + .Net5 WebApi:前端环境搭建

    首先,你需要先装一个Nodejs,这是基础哦.如果没有这方面知识的小伙伴可以在园子里搜索cnpm yarn等关键字,内容繁多,此不赘述,参考链接 一. 简介 1. Ant Design Pro v5 ...

  3. Ant Design Pro入门教程,安装,运行(V5 Typescript版)

    [前言] 找了很多Admin模板,最后还是看中了AntDesignPro这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro.ant.design/in ...

  4. Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行

    ant-design-pro ----> version :2.3.1 由于网上Ant Design Pro+Electron的资料太少,我就贡献一点经验   最近需要讲AntD Pro项目(以 ...

  5. ant design pro (十二)advanced UI 测试

    一.概述 原文地址:https://pro.ant.design/docs/ui-test-cn UI 测试是项目研发流程中的重要一环,有效的测试用例可以梳理业务需求,保证研发的质量和进度,让工程师可 ...

  6. Ant Design Pro快速入门

    在上一篇文章中,我们介绍了如何构建一个Ant Design Pro的环境. 同时讲解了如何启动服务并查看前端页面功能. 在本文中,我们将简单讲解如何在Ant Design Pro框架下实现自己的业务功 ...

  7. 阿里开源项目之Ant Design Pro

    本篇文章主要包含的内容有三个方面. 第一.Ant Design Pro简介; 第二.Ant Design Pro能做什么; 第三.初步使用; 我相信通过这三个方面的讲解能让你大概知道Ant Desig ...

  8. ant design pro (十五)advanced 使用 API 文档工具

    一.概述 原文地址:https://pro.ant.design/docs/api-doc-cn 在日常开发中,往往是前后端分离的,这个时候约定好一套接口标准,前后端各自独立开发,就不会被对方的技术难 ...

  9. ant design pro (十四)advanced 使用 CLI 工具

    一.概述 原文地址:https://pro.ant.design/docs/cli-cn 为了更好以及高效的开发效率,我们提供了配套的 ant-design-pro-cli 工具. pro cli 提 ...

随机推荐

  1. Net之线程池的优点

     使用线程池的好处:     1.减少在创建和销毁线程上所花的时间以及系统资源的开销     2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及"过度切换".

  2. linux下hadoop2.6.1源码64位的编译

    linux下hadoop2.6.1源码64位的编译 一. 前言 Apache官网上提供的hadoop本地库是32位的,如果我们的Linux服务器是64位的话,就会现问题.我们在64位服务器执行Hado ...

  3. Mybatis数据库分页

    使用limit分页(sql语句) SELECT * FROM user limit 0,2 #从第0个开始查,查2个 使用Mybatis实现分页,核心还是sql(map) <select id= ...

  4. 5月16日 python学习总结 DBUtils模块、orm 和 cookie、session、token

    一.DBUtils模块 介绍 The DBUtils suite is realized as a Python package containing two subsets of modules, ...

  5. Ubuntu下使用C语言连接Mysql 8.0客户端教程

    Ubuntu下如何C语言程序连接MYSQL 8.0(全教程) 1. 安装GCC(略) 2. 安装mysql(本人使用的是最新MySQL 8.0版本) sudo apt install mysql-cl ...

  6. java项目中日志的配置

    1.日志相关比较详细的介绍:https://www.cnblogs.com/tanshaoxiaoji/p/log4j_config.html 2.总结1中博客说的内容 目前市场上常用的日志有log4 ...

  7. 如何快速开发基于Winform的应用系统

    在我们实际业务开发中,从头开发一个应用系统,不管是基于BS的前端项目,还是基于Winform的CS应用系统,都是由容易到复杂,逐步演化的一个开发过程,如果我们基于一定基础上,并配合一些配套的开发工具, ...

  8. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?

    Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的就是一对一,collection 指的就是一对多查询.在 Myba ...

  9. MyISAM 表格将在哪里存储,并且还提供其存储格式?

    每个 MyISAM 表格以三种格式存储在磁盘上: ·".frm"文件存储表定义 ·数据文件具有".MYD"(MYData)扩展名 索引文件具有".MY ...

  10. spring-boot-learning-Web开发知识

    1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自己编写业务代码: 文件名的功能 x ...