在Ant Design Pro登錄功能中集成圖形驗證碼組件的方法步驟
前言:
本篇文章只介紹在Ant Design Pro登錄功能中集成圖形驗證碼組件的方法步驟,服務端方法請參考《基于OAuth2.0授權(quán)系統(tǒng)的驗證碼功能》
正文:
在Ant Design Pro模板中,使用賬號密碼登錄功能部分(如下圖),并沒有做圖形驗證碼的開發(fā),所以這部分功能就需要我們自己去實現(xiàn)。這里登錄功能其實本質(zhì)是一個表單提交,所以我們只需自己開發(fā)一個圖形驗證碼表單控件就可以,具體實現(xiàn)如下。

1. 圖形驗證碼表單控件代碼CaptchaInput.tsx:
import React, {useState, useEffect} from 'react';
import {Input, message} from 'antd';
import {SafetyCertificateOutlined} from '@ant-design/icons';
import api from '@/utils/api';
import stringUtil from "@/utils/stringUtil";
import request from "@/utils/request";
import {useIntl} from "umi";
interface CaptchaInputValue {
captchaCode?: string;
captchaKey?: string;
}
interface CaptchaInputProps {
value?: CaptchaInputValue;
onChange?: (value: CaptchaInputValue) => void;
}
/**
* 獲取驗證碼
*/
const getCaptcha = async () => {
try {
const data = await request(api.captcha);
if (data.code === 1) {
return data.data;
}
} catch (error) {
message.error('獲取部門樹失敗,請重試');
return [];
}
message.error('獲取部門樹失敗,請重試');
return [];
}
const CaptchaInput: React.FC<CaptchaInputProps> = ({value = {}, onChange}) => {
const intl = useIntl();
const [captchaCode, setCaptchaCode] = useState<string>('');
const [captchaKey, setCaptchaKey] = useState<string>('');
const [imageData, setImageData] = useState<string>('');
// 觸發(fā)改變
const triggerChange = (changedValue: { captchaCode?: string; captchaKey?: string }) => {
if (onChange) {
onChange({captchaCode, captchaKey, ...value, ...changedValue});
}
};
useEffect(() => {
getCaptcha().then((data: any) => {
setCaptchaKey(data.captchaKey);
setImageData(data.image);
triggerChange({captchaKey: data.captchaKey});
})
}, []);
// 輸入框變化
const onChangeInput = (e: React.ChangeEvent<HTMLInputElement>) => {
const code = e.target.value || '';
if (stringUtil.isNotEmpty(code)) {
setCaptchaCode(code);
}
triggerChange({captchaCode: code});
}
// 時間類型變化
const onClickImage = () => {
getCaptcha().then((data: any) => {
setCaptchaKey(data.captchaKey);
setImageData(data.image);
triggerChange({captchaKey: data.captchaKey});
})
};
return (
<span>
<Input.Group compact>
<Input prefix={<SafetyCertificateOutlined style={{color: "#319cff"}}/>} placeholder={intl.formatMessage({
id: 'pages.login.captcha.placeholder',
defaultMessage: '請輸入驗證碼',
})}
onChange={onChangeInput}
style={{width: '75%', marginRight: 5, padding: '6.5px 11px 6.5px 11px', verticalAlign: 'middle'}}/>
<img style={{width: '23%', height: '35px', verticalAlign: 'middle', padding: '0px 0px 0px 0px'}}
src={imageData} onClick={onClickImage}/>
</Input.Group>
</span>
);
};
export default CaptchaInput;
2.登錄頁面集成組件:
import CaptchaInput from './components/CaptchaInput';
... ...
const handleSubmit = (values: LoginParamsType) => {
const {dispatch} = props;
values.client_id = "hanxiaozhang";
values.client_secret = "hanxiaozhang";
values.scope = "hanxiaozhang";
values.grant_type = "password";
values.captcha_key = values.captchaComp.captchaKey;
values.captcha_code = values.captchaComp.captchaCode;
delete values.captchaComp;
dispatch({
type: 'login/login',
payload: {...values, type},
});
};
... ...
<Form.Item name="captchaComp" rules={[{
validateTrigger: 'onBlur',
validator: async (rule, value) => {
// console.log(rule)
if (stringUtil.isEmpty(value.captchaCode)) {
throw new Error('請輸入驗證碼!');
}
}
},]}>
<CaptchaInput/>
</Form.Item>
... ...
3.使用:
集成之后的效果如下:

以上就是在Ant Design Pro登錄功能中集成圖形驗證碼組件的詳細內(nèi)容,更多關于Ant Design Pro登錄的資料請關注腳本之家其它相關文章!
相關文章
React教程之Props驗證的具體用法(Props Validation)
這篇文章主要介紹了React教程之Props驗證的具體用法(Props Validation),非常具有實用價值,需要的朋友可以參考下2017-09-09
react quill中圖片上傳由默認轉(zhuǎn)成base64改成上傳到服務器的方法
這篇文章主要介紹了react quill中圖片上傳由默認轉(zhuǎn)成base64改成上傳到服務器的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
react項目中使用react-dnd實現(xiàn)列表的拖拽排序功能
這篇文章主要介紹了react項目中使用react-dnd實現(xiàn)列表的拖拽排序,本文結(jié)合實例代碼講解react-dnd是如何實現(xiàn),代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
React+ResizeObserver實現(xiàn)自適應ECharts圖表
ResizeObserver是JavaScript的一個API,用于監(jiān)測元素的大小變化,本文主要為大家介紹了React如何利用ResizeObserver實現(xiàn)自適應ECharts圖表,需要的可以參考下2024-01-01
React-Router如何進行頁面權(quán)限管理的方法
本篇文章主要介紹了React-Router如何進行頁面權(quán)限管理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
react學習每天一個hooks?useWhyDidYouUpdate
這篇文章主要為大家介紹了react學習每天一個hooks?useWhyDidYouUpdate使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04
React中實現(xiàn)keepalive組件緩存效果的方法詳解
由于react官方并沒有提供緩存組件相關的api(類似vue中的keepalive),在某些場景,會使得頁面交互性變的很差。所以本文為大家介紹了React中實現(xiàn)keepalive組件緩存效果的方法,希望對大家有所幫助2023-01-01
簡析React Native startReactApplication 方法
這篇文章主要介紹了React Native startReactApplication 方法簡析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

