Skip to content

Commit 212c873

Browse files
authored
fix(web): fix real-name auth (#1504)
* fix(web): fix real-name auth * fix(web): 404 message
1 parent afac36d commit 212c873

File tree

5 files changed

+110
-85
lines changed

5 files changed

+110
-85
lines changed

web/src/layouts/Basic/RealNameWarn.tsx

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import React, { useState } from "react";
22
import { useTranslation } from "react-i18next";
33
import { WarningTwoIcon } from "@chakra-ui/icons";
4+
import { useColorMode } from "@chakra-ui/react";
5+
import clsx from "clsx";
46

57
import SettingModal from "@/pages/app/setting";
68
import useTabMatch from "@/pages/app/setting/UserSetting/useTabMatch";
@@ -12,12 +14,19 @@ export default function Warn() {
1214
const { userInfo, showError } = useGlobalStore((state) => state);
1315
const [openModal, setOpenModal] = useState(false);
1416
const { siteSettings } = useSiteSettingStore((state) => state);
17+
const { colorMode } = useColorMode();
18+
const darkMode = colorMode === "dark";
1519

1620
return (
17-
<div className="absolute left-1/2 top-10 flex h-16 translate-x-[-50%] items-center justify-between rounded-lg bg-white px-4 text-lg drop-shadow-md">
21+
<div
22+
className={clsx(
23+
"absolute left-1/2 top-10 flex h-16 translate-x-[-50%] items-center justify-between rounded-lg px-4 text-lg drop-shadow-md",
24+
darkMode ? "bg-gray-800" : "bg-white",
25+
)}
26+
>
1827
<span className="flex items-center pr-9">
1928
<WarningTwoIcon className="mr-2 !text-error-600" />
20-
<p>{siteSettings.id_verify?.metadata.message}</p>
29+
<p dangerouslySetInnerHTML={{ __html: siteSettings.id_verify?.metadata.message }} />
2130
</span>
2231
<p
2332
className="cursor-pointer font-semibold text-[#219BF4]"

web/src/layouts/Basic/index.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import { Center, Spinner } from "@chakra-ui/react";
66
import Warn from "./RealNameWarn";
77

88
import Header from "@/layouts/Header";
9+
import useAuthStore from "@/pages/auth/store";
910
import useGlobalStore from "@/pages/globalStore";
1011
import useSiteSettingStore from "@/pages/siteSetting";
1112

1213
export default function BasicLayout() {
1314
const { init, loading, userInfo } = useGlobalStore((state) => state);
1415
const { siteSettings } = useSiteSettingStore((state) => state);
16+
const { providers } = useAuthStore((state) => state);
1517

1618
useEffect(() => {
1719
init();
@@ -27,7 +29,8 @@ export default function BasicLayout() {
2729
) : (
2830
<>
2931
{siteSettings.id_verify?.value === "on" &&
30-
!userInfo?.profile?.idVerified?.isVerified && <Warn />}
32+
!userInfo?.profile?.idVerified?.isVerified &&
33+
providers.find((provider: any) => provider.name === "phone") && <Warn />}
3134
<Outlet />
3235
</>
3336
)}

web/src/pages/app/setting/UserInfo/Mods/PhoneEditor.tsx

+31-25
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import SmsCodeInput from "@/components/SmsCodeInput";
1616

1717
import { useBindPhoneMutation } from "../service";
1818

19+
import useAuthStore from "@/pages/auth/store";
1920
import useGlobalStore from "@/pages/globalStore";
2021

2122
type FormData = {
@@ -29,6 +30,7 @@ export default function PhoneEditor(props: { handleBack: any }) {
2930
const { handleBack } = props;
3031
const { t } = useTranslation();
3132
const bindPhone = useBindPhoneMutation();
33+
const { providers } = useAuthStore();
3234

3335
const { showSuccess, updateUserInfo } = useGlobalStore();
3436

@@ -67,32 +69,36 @@ export default function PhoneEditor(props: { handleBack: any }) {
6769
<VStack>
6870
<span className="text-xl">{t("UserInfo.EditPhone")}</span>
6971
<Box className="w-[265px] pt-4">
70-
<FormControl isInvalid={!!errors?.oldPhoneNumber}>
71-
<div className="pb-2">{t("UserInfo.OldPhoneNumber")}</div>
72-
<InputGroup>
73-
<Input {...register("oldPhoneNumber", { required: true })} variant="userInfo" />
74-
<InputRightElement width="6rem" height={8}>
75-
<SendSmsCodeButton
76-
getPhone={getValues}
77-
phoneNumber={"oldPhoneNumber"}
78-
className="!h-6 !text-[12px]"
79-
type="Unbind"
72+
{providers?.find((provider: any) => provider.name === "phone") || (
73+
<>
74+
<FormControl isInvalid={!!errors?.oldPhoneNumber}>
75+
<div className="pb-2">{t("UserInfo.OldPhoneNumber")}</div>
76+
<InputGroup>
77+
<Input {...register("oldPhoneNumber", { required: true })} variant="userInfo" />
78+
<InputRightElement width="6rem" height={8}>
79+
<SendSmsCodeButton
80+
getPhone={getValues}
81+
phoneNumber={"oldPhoneNumber"}
82+
className="!h-6 !text-[12px]"
83+
type="Unbind"
84+
/>
85+
</InputRightElement>
86+
</InputGroup>
87+
</FormControl>
88+
<FormControl isInvalid={!!errors.oldSmsCode}>
89+
<div className="pb-2 pt-4">{t("UserInfo.OldSmsNumber")}</div>
90+
<Controller
91+
name="oldSmsCode"
92+
control={control}
93+
render={({ field: { onChange, value } }) => (
94+
<div>
95+
<SmsCodeInput value={value} onChange={onChange} />
96+
</div>
97+
)}
8098
/>
81-
</InputRightElement>
82-
</InputGroup>
83-
</FormControl>
84-
<FormControl isInvalid={!!errors.oldSmsCode}>
85-
<div className="pb-2 pt-4">{t("UserInfo.OldSmsNumber")}</div>
86-
<Controller
87-
name="oldSmsCode"
88-
control={control}
89-
render={({ field: { onChange, value } }) => (
90-
<div>
91-
<SmsCodeInput value={value} onChange={onChange} />
92-
</div>
93-
)}
94-
/>
95-
</FormControl>
99+
</FormControl>
100+
</>
101+
)}
96102
<FormControl isInvalid={!!errors.newPhoneNumber}>
97103
<div className="pb-2 pt-4">{t("UserInfo.NewPhoneNumber")}</div>
98104
<InputGroup>

web/src/pages/app/setting/UserInfo/index.tsx

+62-55
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import UsernameEditor from "./Mods/UsernameEditor";
1515

1616
import "react-image-crop/dist/ReactCrop.css";
1717

18+
import useAuthStore from "@/pages/auth/store";
1819
import useGlobalStore from "@/pages/globalStore";
1920
import useSiteSettingStore from "@/pages/siteSetting";
2021

@@ -26,6 +27,7 @@ export default function UserInfo() {
2627
const { colorMode } = useColorMode();
2728
const darkMode = colorMode === "dark";
2829
const { siteSettings } = useSiteSettingStore((state) => state);
30+
const { providers } = useAuthStore((state) => state);
2931

3032
const handleClick = () => {
3133
if (fileInputRef.current) {
@@ -113,69 +115,74 @@ export default function UserInfo() {
113115
</span>
114116
</div>
115117
<Divider className="mb-4 text-grayModern-200" />
116-
{siteSettings.id_verify?.value === "on" && (
118+
{providers?.find((provider: any) => provider.name === "phone") &&
119+
siteSettings.id_verify?.value === "on" && (
120+
<div className="flex flex-col pb-4">
121+
<span
122+
className={clsx(
123+
"flex items-center pb-3 text-xl",
124+
!darkMode && "text-grayModern-900",
125+
)}
126+
>
127+
{t("SettingPanel.Auth")}
128+
{!userInfo?.profile?.idVerified?.isVerified && (
129+
<InfoOutlineIcon className="ml-2 !text-primary-600" />
130+
)}
131+
</span>
132+
<span className="flex justify-between text-base">
133+
<span className={!darkMode ? "text-grayModern-700" : ""}>
134+
{userInfo?.profile?.idVerified?.isVerified
135+
? userInfo?.profile?.name
136+
: t("UserInfo.NoAuth")}
137+
</span>
138+
{!userInfo?.profile?.idVerified?.isVerified ? (
139+
<span
140+
className="flex cursor-pointer items-center text-[#0884DD]"
141+
onClick={() => {
142+
if (userInfo?.phone) {
143+
const w = window.open("about:blank");
144+
w!.location.href = `${
145+
siteSettings.id_verify?.metadata.authenticateSite
146+
}?token=${localStorage.getItem("token")}`;
147+
} else {
148+
showError(t("UserInfo.PleaseBindPhone"));
149+
setShowItem("phone");
150+
}
151+
}}
152+
>
153+
{t("UserInfo.GotoAuth")} <ChevronRightIcon boxSize={5} />
154+
</span>
155+
) : (
156+
<span className="flex items-center">
157+
<span className="mr-2 text-[#485058]">
158+
{t("UserInfo.VerifiedIdentity")}
159+
</span>
160+
<CheckCircleIcon className="!text-primary-600" />
161+
</span>
162+
)}
163+
</span>
164+
</div>
165+
)}
166+
{providers.find((provider: any) => provider.name === "phone") && (
117167
<div className="flex flex-col pb-4">
118-
<span
119-
className={clsx(
120-
"flex items-center pb-3 text-xl",
121-
!darkMode && "text-grayModern-900",
122-
)}
123-
>
124-
{t("SettingPanel.Auth")}
125-
{!userInfo?.profile?.idVerified?.isVerified && (
126-
<InfoOutlineIcon className="ml-2 !text-primary-600" />
127-
)}
168+
<span className={clsx("pb-3 text-xl", !darkMode && "text-grayModern-900")}>
169+
{t("SettingPanel.Tel")}
128170
</span>
129171
<span className="flex justify-between text-base">
130172
<span className={!darkMode ? "text-grayModern-700" : ""}>
131-
{userInfo?.profile?.idVerified?.isVerified
132-
? userInfo?.profile?.name
133-
: t("UserInfo.NoAuth")}
173+
{userInfo?.phone ? hidePhoneNumber(userInfo.phone) : t("NoInfo")}
174+
</span>
175+
<span
176+
className="flex cursor-pointer items-center text-[#0884DD]"
177+
onClick={() => {
178+
setShowItem("phone");
179+
}}
180+
>
181+
{t("UserInfo.Change")} <ChevronRightIcon boxSize={5} />
134182
</span>
135-
{!userInfo?.profile?.idVerified?.isVerified ? (
136-
<span
137-
className="flex cursor-pointer items-center text-[#0884DD]"
138-
onClick={() => {
139-
if (userInfo?.phone) {
140-
const w = window.open("about:blank");
141-
w!.location.href = `${
142-
siteSettings.id_verify?.metadata.authenticateSite
143-
}?token=${localStorage.getItem("token")}`;
144-
} else {
145-
showError(t("UserInfo.PleaseBindPhone"));
146-
setShowItem("phone");
147-
}
148-
}}
149-
>
150-
{t("UserInfo.GotoAuth")} <ChevronRightIcon boxSize={5} />
151-
</span>
152-
) : (
153-
<span className="flex items-center">
154-
<span className="mr-2 text-[#485058]">{t("UserInfo.VerifiedIdentity")}</span>
155-
<CheckCircleIcon className="!text-primary-600" />
156-
</span>
157-
)}
158183
</span>
159184
</div>
160185
)}
161-
<div className="flex flex-col pb-4">
162-
<span className={clsx("pb-3 text-xl", !darkMode && "text-grayModern-900")}>
163-
{t("SettingPanel.Tel")}
164-
</span>
165-
<span className="flex justify-between text-base">
166-
<span className={!darkMode ? "text-grayModern-700" : ""}>
167-
{userInfo?.phone ? hidePhoneNumber(userInfo.phone) : t("NoInfo")}
168-
</span>
169-
<span
170-
className="flex cursor-pointer items-center text-[#0884DD]"
171-
onClick={() => {
172-
setShowItem("phone");
173-
}}
174-
>
175-
{t("UserInfo.Change")} <ChevronRightIcon boxSize={5} />
176-
</span>
177-
</span>
178-
</div>
179186
<div className="flex flex-col pb-4">
180187
<span className={clsx("pb-3 text-xl", !darkMode && "text-grayModern-900")}>
181188
{t("SettingPanel.Email")}

web/src/utils/request.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ request.interceptors.response.use(
6565
return data;
6666
} else if (data.statusCode === 403) {
6767
toast({
68-
title: "403 Forbidden",
68+
title: data.message ? data.message : "403 Forbidden",
6969
position: "top",
7070
status: "error",
7171
duration: 1000,
7272
});
7373
return data;
7474
} else if (data.statusCode === 404) {
7575
toast({
76-
title: "404 Not Found",
76+
title: data.message ? data.message : "404 Not Found",
7777
position: "top",
7878
status: "error",
7979
duration: 1000,

0 commit comments

Comments
 (0)