mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2024-11-11 01:10:11 +01:00
handle expired token being null and prevent constant rerender (#956)
* handle expired token being null and prevent constant rerender * reset defaults
This commit is contained in:
parent
1ecefe8bed
commit
efe9dfa5e3
@ -34,7 +34,7 @@ export default function PasswordModal({ mode = "single" }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function usePasswordModal() {
|
export function usePasswordModal(notry = false) {
|
||||||
const [auth, setAuth] = useState({
|
const [auth, setAuth] = useState({
|
||||||
loading: true,
|
loading: true,
|
||||||
requiresAuth: false,
|
requiresAuth: false,
|
||||||
@ -47,7 +47,7 @@ export function usePasswordModal() {
|
|||||||
|
|
||||||
// If the last validity check is still valid
|
// If the last validity check is still valid
|
||||||
// we can skip the loading.
|
// we can skip the loading.
|
||||||
if (!System.needsAuthCheck()) {
|
if (!System.needsAuthCheck() && notry === false) {
|
||||||
setAuth({
|
setAuth({
|
||||||
loading: false,
|
loading: false,
|
||||||
requiresAuth: false,
|
requiresAuth: false,
|
||||||
@ -60,7 +60,7 @@ export function usePasswordModal() {
|
|||||||
if (settings?.MultiUserMode) {
|
if (settings?.MultiUserMode) {
|
||||||
const currentToken = window.localStorage.getItem(AUTH_TOKEN);
|
const currentToken = window.localStorage.getItem(AUTH_TOKEN);
|
||||||
if (!!currentToken) {
|
if (!!currentToken) {
|
||||||
const valid = await System.checkAuth(currentToken);
|
const valid = notry ? false : await System.checkAuth(currentToken);
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
setAuth({
|
setAuth({
|
||||||
loading: false,
|
loading: false,
|
||||||
@ -102,7 +102,7 @@ export function usePasswordModal() {
|
|||||||
|
|
||||||
const currentToken = window.localStorage.getItem(AUTH_TOKEN);
|
const currentToken = window.localStorage.getItem(AUTH_TOKEN);
|
||||||
if (!!currentToken) {
|
if (!!currentToken) {
|
||||||
const valid = await System.checkAuth(currentToken);
|
const valid = notry ? false : await System.checkAuth(currentToken);
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
setAuth({
|
setAuth({
|
||||||
loading: false,
|
loading: false,
|
||||||
@ -110,6 +110,8 @@ export function usePasswordModal() {
|
|||||||
mode: "single",
|
mode: "single",
|
||||||
});
|
});
|
||||||
window.localStorage.removeItem(AUTH_TOKEN);
|
window.localStorage.removeItem(AUTH_TOKEN);
|
||||||
|
window.localStorage.removeItem(AUTH_USER);
|
||||||
|
window.localStorage.removeItem(AUTH_TIMESTAMP);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
setAuth({
|
setAuth({
|
||||||
|
@ -136,6 +136,6 @@ export default function PrivateRoute({ Component }) {
|
|||||||
<Component />
|
<Component />
|
||||||
</UserMenu>
|
</UserMenu>
|
||||||
) : (
|
) : (
|
||||||
<Navigate to={paths.login()} />
|
<Navigate to={paths.login(true)} />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,11 @@ import PasswordModal, { usePasswordModal } from "@/components/Modals/Password";
|
|||||||
import { FullScreenLoader } from "@/components/Preloader";
|
import { FullScreenLoader } from "@/components/Preloader";
|
||||||
import { Navigate } from "react-router-dom";
|
import { Navigate } from "react-router-dom";
|
||||||
import paths from "@/utils/paths";
|
import paths from "@/utils/paths";
|
||||||
|
import useQuery from "@/hooks/useQuery";
|
||||||
|
|
||||||
export default function Login() {
|
export default function Login() {
|
||||||
const { loading, requiresAuth, mode } = usePasswordModal();
|
const query = useQuery();
|
||||||
|
const { loading, requiresAuth, mode } = usePasswordModal(!!query.get("nt"));
|
||||||
if (loading) return <FullScreenLoader />;
|
if (loading) return <FullScreenLoader />;
|
||||||
if (requiresAuth === false) return <Navigate to={paths.home()} />;
|
if (requiresAuth === false) return <Navigate to={paths.home()} />;
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@ export default {
|
|||||||
home: () => {
|
home: () => {
|
||||||
return "/";
|
return "/";
|
||||||
},
|
},
|
||||||
login: () => {
|
login: (noTry = false) => {
|
||||||
return "/login";
|
return `/login${noTry ? "?nt=1" : ""}`;
|
||||||
},
|
},
|
||||||
onboarding: {
|
onboarding: {
|
||||||
home: () => {
|
home: () => {
|
||||||
|
@ -38,9 +38,17 @@ async function validatedRequest(request, response, next) {
|
|||||||
|
|
||||||
const bcrypt = require("bcrypt");
|
const bcrypt = require("bcrypt");
|
||||||
const { p } = decodeJWT(token);
|
const { p } = decodeJWT(token);
|
||||||
|
|
||||||
|
if (p === null) {
|
||||||
|
response.status(401).json({
|
||||||
|
error: "Token expired or failed validation.",
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!bcrypt.compareSync(p, bcrypt.hashSync(process.env.AUTH_TOKEN, 10))) {
|
if (!bcrypt.compareSync(p, bcrypt.hashSync(process.env.AUTH_TOKEN, 10))) {
|
||||||
response.status(401).json({
|
response.status(401).json({
|
||||||
error: "Invalid auth token found.",
|
error: "Invalid auth credentials.",
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user