diff --git a/package.json b/package.json index 6f96decbb..80dc25922 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,8 @@ "code-prettify": "^0.1.0", "codemirror": "^5.64.0", "connected-react-router": "4.4.1", + "core-js": "^3.34.0", + "crypto-js": "^4.2.0", "dompurify": "^2.3.3", "dotenv": "4.0.0", "dotenv-expand": "4.2.0", diff --git a/src/common/Env.js b/src/common/Env.js index 9830d7725..6fcfec767 100644 --- a/src/common/Env.js +++ b/src/common/Env.js @@ -1,3 +1,5 @@ +import CryptoJS from 'crypto-js'; + export function isDev() { return window.location.port === "3007"; } @@ -6,3 +8,12 @@ export function isDev() { export const isMobile = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase())); // const isWeiXin = (/MicroMessenger/i.test(navigator.userAgent.toLowerCase())); + +export function Encrypt(str){ + let result = CryptoJS.AES.encrypt(str,CryptoJS.enc.Utf8.parse('59c96c3572ab8cc1'),{ + iv:CryptoJS.enc.Utf8.parse('59c96c3572ab8cc1'), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }) + return result.toString(); +} diff --git a/src/forge/Team/Setting/TeamSettingCommon.jsx b/src/forge/Team/Setting/TeamSettingCommon.jsx index d1ff67c0f..23ce2768f 100644 --- a/src/forge/Team/Setting/TeamSettingCommon.jsx +++ b/src/forge/Team/Setting/TeamSettingCommon.jsx @@ -6,6 +6,7 @@ import styled from 'styled-components'; import UploadImage from '../Component/UploadImage'; import axios from 'axios'; import Modals from '../Component/Modals'; +import { Encrypt } from '../../../common/Env'; import { getImageUrl } from 'educoder'; const TextArea = Input.TextArea; @@ -91,7 +92,7 @@ export default Form.create()( function onOk(password){ const url = `/organizations/${organizeDetail.id}.json`; axios.delete(url,{ - params:{ password } + params:{ password:Encrypt(password) } }).then(result=>{ if(result && result.data){ // 删除后跳转到个人中心的组织页面 diff --git a/src/forge/users/Material/Password.jsx b/src/forge/users/Material/Password.jsx index 37cc3b9a8..4c6454dbc 100644 --- a/src/forge/users/Material/Password.jsx +++ b/src/forge/users/Material/Password.jsx @@ -7,6 +7,7 @@ import img1 from '../../Images/personalInfo3.png'; import { setmiyah } from '../../../common/Component'; import { useEffect } from 'react'; import Phone from './Phone'; +import { Encrypt } from '../../../common/Env'; export default Form.create()( forwardRef((props)=>{ @@ -104,7 +105,7 @@ export default Form.create()( const map = type === '0' ? passMap : updatePsdMap; if(value){ current_user && Axios.post(`/v1/${current_user.login}/check_password.json`,{ - password: value + password: Encrypt(value) }).then(res=>{ if(res && !res.data.status){ if(type === '0'){ @@ -153,6 +154,8 @@ export default Form.create()( }else{ setEmailValue(undefined); map.email = undefined; + // 防止已经输入过验证码但是还未输入邮箱地址 + setFieldsValue({code:""}) setPassMap(map); callback(res.data.message); } @@ -206,7 +209,7 @@ export default Form.create()( const {code, email, password1} = getFieldsValue(); if( email && password1){ current_user && Axios.patch(`/v1/${current_user.login}/update_email.json`,{ - code:"123123", email, password: password1 + code:"123123", email, password:Encrypt(password1) }).then(res=>{ if(res && !res.data.status){ setPassMap({password: undefined, email: undefined, code: undefined}); @@ -222,10 +225,13 @@ export default Form.create()( } }else{ const values = getFieldsValue(); + const { old_password , password , new_password_repeat } = values; const url = `/accounts/change_password.json`; Axios.post(url,{ login:current_user && current_user.login, - ...values + old_password:Encrypt(old_password), + password:Encrypt(password), + new_password_repeat:Encrypt(new_password_repeat), }).then(result=>{ if(result && result.data){ resetFields(); diff --git a/src/forge/users/Material/Phone.jsx b/src/forge/users/Material/Phone.jsx index 2895c88c8..3aa13ff0c 100644 --- a/src/forge/users/Material/Phone.jsx +++ b/src/forge/users/Material/Phone.jsx @@ -4,6 +4,7 @@ import Modals from '../../Component/PublicModal/Index'; import { AlignCenter } from '../../Component/layout'; import img1 from '../../Images/personalInfo3.png'; import { setmiyah } from '../../../common/Component'; +import { Encrypt } from '../../../common/Env'; import Axios from 'axios'; @@ -21,7 +22,7 @@ export default Form.create()( const map = passMap; if(value){ current_user && value.length > 7 && Axios.post(`/v1/${current_user.login}/check_password.json`,{ - password: value + password: Encrypt(value) }).then(res=>{ if(res && !res.data.status){ map.logpassword = value; @@ -148,7 +149,7 @@ export default Form.create()( const {mescode, phone, logpassword} = getFieldsValue(); if(phone && logpassword){ current_user && Axios.patch(`/v1/${current_user.login}/update_phone.json`,{ - code:"123123", phone, password:logpassword + code:"123123", phone, password: Encrypt(logpassword) }).then(res=>{ if(res && !res.data.status){ setPassMap({logpassword: undefined, phone: undefined, code: undefined}); diff --git a/src/forge/users/Material/component/offAccount.jsx b/src/forge/users/Material/component/offAccount.jsx new file mode 100644 index 000000000..8a4f89c1b --- /dev/null +++ b/src/forge/users/Material/component/offAccount.jsx @@ -0,0 +1,73 @@ +import React , { forwardRef, useState } from 'react'; +import { Modal , Form , Button , Input } from 'antd'; +import Axios from 'axios'; +import { Encrypt } from '../../../../common/Env'; +const { TextArea } = Input; + +export default Form.create()(forwardRef((props)=>{ + const { getFieldDecorator , validateFields } = props && props.form; + const { onCancel, visible , current_user} = props; + const [ loading , setLoading ] =useState(false); + + + function onDelete(){ + validateFields((error,values)=>{ + if(!error && current_user){ + const { password } = values; + setLoading(true); + const url = `/v1/${current_user.login}.json`; + Axios.delete(url,{ + data:{...values,password:Encrypt(password)} + }).then(result=>{ + if(result.data && result.data.status === 0){ + window.location.href = `/`; + onCancel(); + } + setLoading(false); + }).catch(error=>{setLoading(false);}) + + } + }) + } + return( + +
+

是否仍要注销?

+

注销后你将丢失该帐号产生的所有数据,一旦注销相关数据将不可恢复,请输入登录密码再次确认

+
+ + {getFieldDecorator("password",{ + rules:[ + {required:true,message:"请输入登录密码"}, + // {validator:(rule, value, callback)=>checkNewPass(rule, value, callback, NewPassRepeat)} + ], + validateFirst: true, + validateTrigger:"onBlur", + })( + + )} + + + {getFieldDecorator("memo",{ + rules:[{required:true,message:"请输入注销原因"}], + })( +