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

后端框架选用了 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. 关于深搜dps

    哈哈,我又来了! 但是!今天我又带来了让人开心到窒息的 ----深搜dps 其实关于深搜,概念没啥可讲的,总结一句话概括就是:一直往下搜,直到满足条件的,再回来,沿着下一条路搜,直到把路全走完为止.. ...

  2. Mybatis将mapper映射文件配置到recources下

    关于为什么要将Mybatis的mappers.xml文件配置到resources目录下的粗浅看法: (1).使文件目录更加清晰.resources文件目录下通常为配置文件,所以将Mappers.xml ...

  3. logging 日志模块 configparser 配置文件

    logging 模块 (copy博客) 详情浏览:http://www.cnblogs.com/linhaifeng/articles/6384466.html#_label12 函数式简单配置 im ...

  4. unicode decode error解决办法

    在使用flask编写博客程序时候,遇到了这个错误. 解决办法如下 添加如下代码 from flask import Flask, render_template import sys reload(s ...

  5. sql注入之简要注入

    #mysql简要注入流程 mysql注入简要流程如下图: 由于还没学习完先结合sqlilabs的第一关讲解信息收集的一部分和数据注入的information_schema的有据查询. #sqli-la ...

  6. OO第一单元

    OO第一单元总结 目录 OO第一单元总结 前言 第一次作业 HW1基本思路 UML类图 代码规模 复杂度分析 方法复杂度 分析 类复杂度 分析 优化策略 第二次作业 HW2基本思路 UML类图 代码规 ...

  7. Linux C申请内存三种基本方式

    一份代码可以知道具体方式和原理: int main() { int stack_a; int stack_b; static int static_c; static int static_d; in ...

  8. [MRCTF]XOR-无法生成反汇编的处理

    主程序,无法生成伪代码 由此分为两种方法即: 直接看反汇编 解决问题,尝试生成伪代码 硬啃汇编 输入与输出 判断输入长度是否为0x1B,其中al为eax的低8位 将输入的字符每个与当前字符所在下标异或 ...

  9. springboot 设定访问项目的根路径

    springboot的配置文件application.yml: spring.mvc.view.prefix : / spring.mvc.view.suffix : .html server: po ...

  10. MySQL使用日期列作为UNIQUE索引

    https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_extract https://dev.my ...