Merge branch '20220815-登录过程中用户信息错误导致登录失败的业务处理' into 'release_20220923'
9.23 登录过程中用户信息错误导致登录失败的业务处理 See merge request eshop/fe_service_ebtp_frontend!2
This commit is contained in:
@ -1,12 +1,14 @@
|
||||
import { logoutTokenApi } from '@/services/login';
|
||||
import { getURLInformation, isNotEmpty } from '@/utils/CommonUtils';
|
||||
import { getSessionRoleData } from '@/utils/session';
|
||||
import { Result, Typography } from 'antd';
|
||||
import { Button, Result, Typography } from 'antd';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { history } from 'umi';
|
||||
|
||||
const message = {
|
||||
const messageMap = {
|
||||
401: '您的用户信息有误,请联系管理员',
|
||||
402: '您的用户角色信息缺失,请联系管理员',
|
||||
403: '您的用户角色信息异常,请重新登录',
|
||||
90401: '您的登录已超时,请重新登录',
|
||||
404: '系统错误,请联系管理员',
|
||||
};
|
||||
@ -16,6 +18,7 @@ const RequestTimeoutPage: React.FC<{}> = () => {
|
||||
const { Text } = Typography;
|
||||
const [time, setTime] = useState<number>(10);
|
||||
const roleData = getSessionRoleData();
|
||||
const token = sessionStorage.getItem('Authorization');
|
||||
|
||||
useEffect(() => {
|
||||
let timeInteval: any
|
||||
@ -44,11 +47,18 @@ const RequestTimeoutPage: React.FC<{}> = () => {
|
||||
})
|
||||
}
|
||||
}
|
||||
const redirectLogin = () => {
|
||||
logoutTokenApi({ mall3_token: token }).then(res => {
|
||||
history.replace({
|
||||
pathname: '/userformal/login',
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<Result
|
||||
title={message[code]}
|
||||
extra={isNotEmpty(roleData) && code == 402 && <Text type="secondary" strong>{time}秒后进入默认角色</Text>}
|
||||
title={messageMap[code]}
|
||||
extra={isNotEmpty(roleData) && code == 402 ? <Text type="secondary" strong>{time}秒后进入默认角色</Text> : code == 403 ? <Button type="primary" onClick={() => redirectLogin()}>重新登录</Button> : null}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
@ -38,10 +38,16 @@ const Loading: React.FC<{}> = () => {
|
||||
await cooperReloadToken('', headers)
|
||||
await getUserData(token, url, extra, 1)
|
||||
} else if (userType == '2') {//专家
|
||||
await refreshTokenApi(params, header).then(async res => {
|
||||
if (res?.success == true) {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
await getUserData(token, url, extra, 1)
|
||||
// await refreshTokenApi(params, header).then(async res => {
|
||||
// if (res?.success == true) {
|
||||
// sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
// await getUserData(token, url, extra, 1)
|
||||
// }
|
||||
// })
|
||||
history.replace({
|
||||
pathname: '/401',
|
||||
query: {
|
||||
code: '403',
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
const [imgUrl, setImgUrl] = useState<any>('');
|
||||
const [tmpToken, setTmpToken] = useState<any>('');
|
||||
const remainingTime = 3 //刷新token的剩余时间,单位小时
|
||||
|
||||
|
||||
const genRandomString = (len: number) => {
|
||||
const text = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
||||
const rdmIndex = (text: string | any[]) => (Math.random() * text.length) | 0;
|
||||
@ -56,7 +56,7 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
sessionStorage.clear();
|
||||
changeCaptcha();
|
||||
}, []);
|
||||
|
||||
|
||||
//登录刷新Token方法
|
||||
const refreshToken = async (data: any) => {
|
||||
const params = {
|
||||
@ -68,10 +68,10 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
const header = {
|
||||
clientId: REACT_APP_CLIENT_KEY,
|
||||
}
|
||||
await refreshTokenApi(params,header).then(res => {
|
||||
if(res?.success == true) {
|
||||
await refreshTokenApi(params, header).then(res => {
|
||||
if (res?.success == true) {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -79,21 +79,21 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
}
|
||||
|
||||
const handleSubmit = async (values: any) => {
|
||||
if(START_ENV == 'sim' || START_ENV == 'PROD'){
|
||||
if (START_ENV == 'sim' || START_ENV == 'PROD') {
|
||||
let code = {
|
||||
code: values.userCode
|
||||
}
|
||||
await getPassword ({...code}).then((res: any) => {
|
||||
await getPassword({ ...code }).then((res: any) => {
|
||||
if (res?.data) {
|
||||
|
||||
|
||||
disSet(true);
|
||||
CloudfakeAccountLogin({ ...values, tmpToken }).then((res) => {
|
||||
if (res?.success) {
|
||||
if(moment(res?.data?.expiration).diff(moment(),'hours') < remainingTime) {
|
||||
if (moment(res?.data?.expiration).diff(moment(), 'hours') < remainingTime) {
|
||||
refreshToken(res?.data)
|
||||
} else {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -101,7 +101,7 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
changeCaptcha()
|
||||
disSet(false);
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
message.error('口令不正确,请重新输入')
|
||||
}
|
||||
@ -110,11 +110,11 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
disSet(true);
|
||||
await CloudfakeAccountLogin({ ...values, tmpToken }).then((res) => {
|
||||
if (res?.success) {
|
||||
if(moment(res?.data?.expiration).diff(moment(),'hours') < remainingTime) {
|
||||
if (moment(res?.data?.expiration).diff(moment(), 'hours') < remainingTime) {
|
||||
refreshToken(res?.data)
|
||||
} else {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -137,14 +137,14 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
<LoginMessage content="账号或密码错误" />
|
||||
)}
|
||||
{
|
||||
START_ENV == 'sim' || START_ENV == 'PROD' ?
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item name="userCode" rules={[{ required: true, message: '请输入口令' }]}>
|
||||
<Input size='large' placeholder="请输入口令" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row> : null
|
||||
START_ENV == 'sim' || START_ENV == 'PROD' ?
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item name="userCode" rules={[{ required: true, message: '请输入口令' }]}>
|
||||
<Input size='large' placeholder="请输入口令" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row> : null
|
||||
}
|
||||
<UserName
|
||||
name="userName"
|
||||
@ -172,8 +172,8 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
<Input size='large' placeholder="验证码" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12} style={{lineHeight: '33.11px'}}>
|
||||
<Image src={imgUrl} preview={false} onClick={() => changeCaptcha()}/>
|
||||
<Col span={12} style={{ lineHeight: '33.11px' }}>
|
||||
<Image src={imgUrl} preview={false} onClick={() => changeCaptcha()} />
|
||||
</Col>
|
||||
</Row>
|
||||
</Tab>
|
||||
|
@ -71,7 +71,7 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
await refreshTokenApi(params, header).then(res => {
|
||||
if (res?.success == true) {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -93,7 +93,7 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
refreshToken(res?.data)
|
||||
} else {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -115,7 +115,7 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
refreshToken(res?.data)
|
||||
} else {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
|
@ -68,10 +68,10 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
const header = {
|
||||
clientId: REACT_APP_CLIENT_KEY,
|
||||
}
|
||||
await refreshTokenApi(params,header).then(res => {
|
||||
if(res?.success == true) {
|
||||
await refreshTokenApi(params, header).then(res => {
|
||||
if (res?.success == true) {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -79,21 +79,21 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
}
|
||||
|
||||
const handleSubmit = async (values: any) => {
|
||||
if(START_ENV == 'sim' || START_ENV == 'PROD'){
|
||||
if (START_ENV == 'sim' || START_ENV == 'PROD') {
|
||||
let code = {
|
||||
code: values.userCode
|
||||
}
|
||||
await getPassword ({...code}).then((res) => {
|
||||
await getPassword({ ...code }).then((res) => {
|
||||
if (res?.data) {
|
||||
|
||||
|
||||
disSet(true);
|
||||
ZjfakeAccountLogin({ ...values, tmpToken }).then((res) => {
|
||||
if (res?.success) {
|
||||
if(moment(res?.data?.expiration).diff(moment(),'hours') < remainingTime) {
|
||||
if (moment(res?.data?.expiration).diff(moment(), 'hours') < remainingTime) {
|
||||
refreshToken(res?.data)
|
||||
} else {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -101,7 +101,7 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
changeCaptcha();
|
||||
disSet(false);
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
message.error('口令不正确,请重新输入')
|
||||
}
|
||||
@ -110,11 +110,11 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
disSet(true);
|
||||
await ZjfakeAccountLogin({ ...values, tmpToken }).then((res) => {
|
||||
if (res?.success) {
|
||||
if(moment(res?.data?.expiration).diff(moment(),'hours') < remainingTime) {
|
||||
if (moment(res?.data?.expiration).diff(moment(), 'hours') < remainingTime) {
|
||||
refreshToken(res?.data)
|
||||
} else {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -141,14 +141,14 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
<LoginMessage content="账号或密码错误" />
|
||||
)}
|
||||
{
|
||||
START_ENV == 'sim' || START_ENV == 'PROD' ?
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item name="userCode" rules={[{ required: true, message: '请输入口令' }]}>
|
||||
<Input size='large' placeholder="请输入口令" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row> : null
|
||||
START_ENV == 'sim' || START_ENV == 'PROD' ?
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item name="userCode" rules={[{ required: true, message: '请输入口令' }]}>
|
||||
<Input size='large' placeholder="请输入口令" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row> : null
|
||||
}
|
||||
<UserName
|
||||
name="userName"
|
||||
@ -177,8 +177,8 @@ const Login: React.FC<LoginProps> = (props) => {
|
||||
<Input size='large' placeholder="验证码" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12} style={{lineHeight: '33.11px'}}>
|
||||
<Image src={imgUrl} preview={false} onClick={() => changeCaptcha()}/>
|
||||
<Col span={12} style={{ lineHeight: '33.11px' }}>
|
||||
<Image src={imgUrl} preview={false} onClick={() => changeCaptcha()} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Submit loading={submitting} disabled={dis}>
|
||||
|
@ -51,7 +51,7 @@ const Index: React.FC<{}> = () => {
|
||||
await refreshTokenApi(params, header).then(res => {
|
||||
if (res?.success == true) {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -65,7 +65,7 @@ const Index: React.FC<{}> = () => {
|
||||
refreshToken(res?.data)
|
||||
} else {
|
||||
sessionStorage.setItem('Authorization', res?.data?.value);
|
||||
sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
// sessionStorage.setItem('refreshToken', res?.data?.refreshToken.value);
|
||||
sessionStorage.setItem('scope', res?.data?.scope);
|
||||
history.push('/redirect');
|
||||
}
|
||||
@ -180,7 +180,7 @@ const Index: React.FC<{}> = () => {
|
||||
<Form.Item>
|
||||
<Button type="primary" className="w100" htmlType="submit">
|
||||
登 录
|
||||
</Button>
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</div>
|
||||
|
@ -107,4 +107,14 @@ export async function getFakeCaptcha(params: any) {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 用户登出
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export async function logoutTokenApi(params: any) {
|
||||
return request('/api/auth/logout', {
|
||||
method: 'GET',
|
||||
params: params
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user