在Ant Design Pro登錄功能中集成圖形驗(yàn)證碼組件的方法步驟
前言:
本篇文章只介紹在Ant Design Pro登錄功能中集成圖形驗(yàn)證碼組件的方法步驟,服務(wù)端方法請(qǐng)參考《基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能》
正文:
在Ant Design Pro模板中,使用賬號(hào)密碼登錄功能部分(如下圖),并沒有做圖形驗(yàn)證碼的開發(fā),所以這部分功能就需要我們自己去實(shí)現(xiàn)。這里登錄功能其實(shí)本質(zhì)是一個(gè)表單提交,所以我們只需自己開發(fā)一個(gè)圖形驗(yàn)證碼表單控件就可以,具體實(shí)現(xiàn)如下。
1. 圖形驗(yàn)證碼表單控件代碼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; } /** * 獲取驗(yàn)證碼 */ const getCaptcha = async () => { try { const data = await request(api.captcha); if (data.code === 1) { return data.data; } } catch (error) { message.error('獲取部門樹失敗,請(qǐng)重試'); return []; } message.error('獲取部門樹失敗,請(qǐng)重試'); 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}); } // 時(shí)間類型變化 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: '請(qǐng)輸入驗(yàn)證碼', })} 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('請(qǐng)輸入驗(yàn)證碼!'); } } },]}> <CaptchaInput/> </Form.Item> ... ...
3.使用:
集成之后的效果如下:
以上就是在Ant Design Pro登錄功能中集成圖形驗(yàn)證碼組件的詳細(xì)內(nèi)容,更多關(guān)于Ant Design Pro登錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React教程之Props驗(yàn)證的具體用法(Props Validation)
這篇文章主要介紹了React教程之Props驗(yàn)證的具體用法(Props Validation),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-09-09瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼
這篇文章主要給大家介紹了關(guān)于瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼,并且詳細(xì)總結(jié)了瀏覽器中的音視頻知識(shí),對(duì)大家的理解和學(xué)習(xí)非常有幫助,需要的朋友可以參考下2021-08-08react quill中圖片上傳由默認(rèn)轉(zhuǎn)成base64改成上傳到服務(wù)器的方法
這篇文章主要介紹了react quill中圖片上傳由默認(rèn)轉(zhuǎn)成base64改成上傳到服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序功能
這篇文章主要介紹了react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序,本文結(jié)合實(shí)例代碼講解react-dnd是如何實(shí)現(xiàn),代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02React+ResizeObserver實(shí)現(xiàn)自適應(yīng)ECharts圖表
ResizeObserver是JavaScript的一個(gè)API,用于監(jiān)測元素的大小變化,本文主要為大家介紹了React如何利用ResizeObserver實(shí)現(xiàn)自適應(yīng)ECharts圖表,需要的可以參考下2024-01-01React-Router如何進(jìn)行頁面權(quán)限管理的方法
本篇文章主要介紹了React-Router如何進(jìn)行頁面權(quán)限管理的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12react學(xué)習(xí)每天一個(gè)hooks?useWhyDidYouUpdate
這篇文章主要為大家介紹了react學(xué)習(xí)每天一個(gè)hooks?useWhyDidYouUpdate使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04React中實(shí)現(xiàn)keepalive組件緩存效果的方法詳解
由于react官方并沒有提供緩存組件相關(guān)的api(類似vue中的keepalive),在某些場景,會(huì)使得頁面交互性變的很差。所以本文為大家介紹了React中實(shí)現(xiàn)keepalive組件緩存效果的方法,希望對(duì)大家有所幫助2023-01-01簡析React Native startReactApplication 方法
這篇文章主要介紹了React Native startReactApplication 方法簡析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09