67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
|
|
import { ILogin_DTO, ILogin_Response_DTO } from "@shared/contexts";
|
||
|
|
import secureLocalStorage from "react-secure-storage";
|
||
|
|
import { IAuthActions } from "../hooks";
|
||
|
|
import { createAxiosInstance } from "./axiosInstance";
|
||
|
|
|
||
|
|
export const createAxiosAuthActions = (
|
||
|
|
apiUrl: string,
|
||
|
|
httpClient = createAxiosInstance()
|
||
|
|
): IAuthActions => ({
|
||
|
|
login: async ({ email, password }: ILogin_DTO) => {
|
||
|
|
// eslint-disable-next-line no-useless-catch
|
||
|
|
try {
|
||
|
|
const { data } = await httpClient.request<ILogin_Response_DTO>({
|
||
|
|
url: `${apiUrl}/auth/login`,
|
||
|
|
method: "POST",
|
||
|
|
data: {
|
||
|
|
email,
|
||
|
|
password,
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
secureLocalStorage.setItem("uecko", JSON.stringify(data));
|
||
|
|
|
||
|
|
return {
|
||
|
|
success: true,
|
||
|
|
data,
|
||
|
|
redirectTo: "/",
|
||
|
|
};
|
||
|
|
} catch (error) {
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: {
|
||
|
|
message: "Login failed",
|
||
|
|
name: "Invalid email or password",
|
||
|
|
},
|
||
|
|
};
|
||
|
|
}
|
||
|
|
},
|
||
|
|
logout: () => {
|
||
|
|
secureLocalStorage.removeItem("uecko");
|
||
|
|
return Promise.resolve({
|
||
|
|
success: true,
|
||
|
|
redirectTo: "/login",
|
||
|
|
});
|
||
|
|
},
|
||
|
|
check: () => {
|
||
|
|
const data: ILogin_Response_DTO = JSON.parse(
|
||
|
|
secureLocalStorage.getItem("uecko")?.toString() || ""
|
||
|
|
);
|
||
|
|
return Promise.resolve(
|
||
|
|
data.token
|
||
|
|
? {
|
||
|
|
authenticated: true,
|
||
|
|
}
|
||
|
|
: { authenticated: false, redirectTo: "/login" }
|
||
|
|
);
|
||
|
|
},
|
||
|
|
onError: (error: any) => {
|
||
|
|
console.error(error);
|
||
|
|
secureLocalStorage.removeItem("uecko");
|
||
|
|
return Promise.resolve({
|
||
|
|
error,
|
||
|
|
logout: true,
|
||
|
|
});
|
||
|
|
},
|
||
|
|
});
|