Harden password reset and email send flows
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useEffect, useMemo, useState } from "react";
|
||||
import React, { useEffect, useState } from "react";
|
||||
|
||||
import { Box, Button, Checkbox, FormControlLabel, Paper, Tab, Tabs, TextField, Typography } from "@mui/material";
|
||||
|
||||
@@ -30,10 +30,8 @@ export default function LoginPage() {
|
||||
const [password, setPassword] = useState("");
|
||||
const [rememberMe, setRememberMe] = useState(() => getRememberMePref());
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [resetLoading, setResetLoading] = useState(false);
|
||||
|
||||
const nextPath = (location?.state?.from as string | undefined) ?? "/jobs";
|
||||
const canRequestPasswordReset = useMemo(() => email.trim().length > 0, [email]);
|
||||
|
||||
useEffect(() => {
|
||||
api
|
||||
@@ -58,23 +56,6 @@ export default function LoginPage() {
|
||||
}
|
||||
}
|
||||
|
||||
async function requestPasswordReset() {
|
||||
if (!canRequestPasswordReset) {
|
||||
toast(t("passwordResetEnterEmail"), "info");
|
||||
return;
|
||||
}
|
||||
|
||||
setResetLoading(true);
|
||||
try {
|
||||
await api.post("/auth/request-password-reset", { email: email.trim() });
|
||||
toast(t("passwordResetRequestSent"), "success");
|
||||
} catch (e: any) {
|
||||
toast(getApiErrorMessage(e, t("passwordResetRequestFailed")), "error");
|
||||
} finally {
|
||||
setResetLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
const allowReg = cfg?.allowRegistration ?? false;
|
||||
|
||||
return (
|
||||
@@ -116,11 +97,10 @@ export default function LoginPage() {
|
||||
type="button"
|
||||
variant="text"
|
||||
size="small"
|
||||
onClick={() => void requestPasswordReset()}
|
||||
disabled={resetLoading}
|
||||
onClick={() => navigate(`/forgot-password${email.trim() ? `?email=${encodeURIComponent(email.trim())}` : ""}`)}
|
||||
sx={{ px: 0, minWidth: 0, fontWeight: 700, alignSelf: { xs: "stretch", sm: "auto" } }}
|
||||
>
|
||||
{resetLoading ? t("passwordResetRequestSending") : t("forgotPassword")}
|
||||
{t("forgotPassword")}
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user