@webbydevs/react-laravel-sanctum-auth
Version:
A React library for easy authentication for a Laravel backend using Sanctum.
1 lines • 8 kB
Source Map (JSON)
{"version":3,"sources":["../src/auth/AuthAPI.tsx","../src/auth/AuthContext.tsx","../src/auth/useApiClient.tsx"],"sourcesContent":["import { AxiosInstance } from \"axios\";\nimport axios from \"axios\";\n\nimport { useAuth } from \"./AuthContext\";\nimport useApiClient from \"./useApiClient\";\n\nexport function useFetchCsrfToken() {\n const fetchCsrfToken = async (path: string) => {\n await axios.get(path);\n var xsrf_token = \"\";\n document.cookie.split(\";\").forEach((cookie) => {\n if (cookie.split(\"=\")[0].includes(\"XSRF-TOKEN\")) {\n xsrf_token = cookie.split(\"=\")[1].split(\"%\")[0];\n }\n });\n return xsrf_token;\n };\n\n return fetchCsrfToken;\n}\n\nasync function BasicAuthAPIRequest(\n path: string,\n requestBody: object,\n apiClient: AxiosInstance,\n setUser: (user: UserType) => void\n) {\n try {\n return await apiClient.post(path, requestBody).then((response) => {\n if (response.status === 200) {\n setUser(response.data);\n return { success: true };\n }\n });\n } catch (error) {\n return { success: false, error: error };\n }\n}\n\nexport function useLogin() {\n const apiClient = useApiClient();\n const { setUser, config } = useAuth();\n const login = async (requestBody: object) => {\n return await BasicAuthAPIRequest(\n config?.loginUrl || \"\",\n requestBody,\n apiClient,\n setUser\n );\n };\n\n return { login };\n}\n\nexport function useRegister() {\n const apiClient = useApiClient();\n const { setUser, config } = useAuth();\n\n const register = async (requestBody: object) => {\n return await BasicAuthAPIRequest(\n config?.registerUrl || \"\",\n requestBody,\n apiClient,\n setUser\n );\n };\n\n return { register };\n}\n\nexport function useLogout() {\n const apiClient = useApiClient();\n const { setUser, config } = useAuth();\n\n const logout = async () => {\n try {\n await apiClient.post(config?.logoutUrl || \"\").then((response) => {\n if (response.status === 200) {\n localStorage.removeItem(\"user\");\n setUser(null);\n return { success: true };\n }\n });\n } catch (error) {\n return { success: false, error: error };\n }\n };\n\n return { logout };\n}\n","import React, { createContext, useContext, useEffect, useState } from \"react\";\n\nimport { useFetchCsrfToken } from \"./AuthAPI\";\n\nconst AuthContent = createContext<AuthContextType>({\n user: null,\n setUser: (user: UserType | null) => {},\n csrfToken: null,\n setCsrfToken: (token: string) => {},\n config: null,\n});\n\nexport function AuthProvider({ config, children }: AuthContextProps) {\n const fetchCsrfToken = useFetchCsrfToken();\n const [user, _setUser] = useState<UserType>(\n (JSON.parse(localStorage.getItem(\"user\") as string) as UserType) || null\n );\n const csrf = JSON.parse(\n localStorage.getItem(\"csrfToken\") as string\n ) as string;\n const [csrfToken, _setCsrfToken] = useState<string>(csrf);\n\n const setFunctionWithLocalStorage = (\n setter: React.Dispatch<React.SetStateAction<any>>,\n key: string,\n value: any\n ) => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch (error) {\n localStorage.setItem(key, \"\");\n }\n setter(value);\n };\n\n const setUser = (value: UserType | null) => {\n setFunctionWithLocalStorage(_setUser, \"user\", value);\n };\n\n const setCsrfToken = (value: string | null) => {\n setFunctionWithLocalStorage(_setCsrfToken, \"csrfToken\", value);\n };\n\n useEffect(() => {\n async function fetchCsrf() {\n const xsrf_token = await fetchCsrfToken(\n new URL(config.csrfCookieUrl, config.baseUrl).href\n );\n setCsrfToken(xsrf_token);\n }\n fetchCsrf();\n // eslint-disable-next-line\n }, []);\n\n return (\n <AuthContent.Provider\n value={{ user, setUser, csrfToken, setCsrfToken, config }}\n >\n {children}\n </AuthContent.Provider>\n );\n}\n\nexport function useAuth() {\n return useContext(AuthContent);\n}\n","import axios from \"axios\";\nimport { useAuth } from \"./AuthContext\";\n\nexport default function useApiClient() {\n const { csrfToken, config } = useAuth();\n\n const apiClient = axios.create({\n baseURL: config?.baseUrl,\n withCredentials: true,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n });\n\n apiClient.interceptors.request.use((config) => {\n config.headers[\"X-XSRF-TOKEN\"] = csrfToken;\n return config;\n });\n\n return apiClient;\n}\n"],"mappings":"6MACA,OAAOA,MAAW,QCDlB,OAAOC,GAAS,iBAAAC,EAAe,cAAAC,EAAY,aAAAC,EAAW,YAAAC,MAAgB,QAItE,IAAMC,EAAcC,EAA+B,CACjD,KAAM,KACN,QAAUC,GAA0B,CAAC,EACrC,UAAW,KACX,aAAeC,GAAkB,CAAC,EAClC,OAAQ,IACV,CAAC,EAEM,SAASC,EAAa,CAAE,OAAAC,EAAQ,SAAAC,CAAS,EAAqB,CACnE,IAAMC,EAAiBC,EAAkB,EACnC,CAACN,EAAMO,CAAQ,EAAIC,EACtB,KAAK,MAAM,aAAa,QAAQ,MAAM,CAAW,GAAkB,IACtE,EACMC,EAAO,KAAK,MAChB,aAAa,QAAQ,WAAW,CAClC,EACM,CAACC,EAAWC,CAAa,EAAIH,EAAiBC,CAAI,EAElDG,EAA8B,CAClCC,EACAC,EACAC,IACG,CACH,GAAI,CACF,aAAa,QAAQD,EAAK,KAAK,UAAUC,CAAK,CAAC,CACjD,OAASC,EAAO,CACd,aAAa,QAAQF,EAAK,EAAE,CAC9B,CACAD,EAAOE,CAAK,CACd,EAEME,EAAWF,GAA2B,CAC1CH,EAA4BL,EAAU,OAAQQ,CAAK,CACrD,EAEMG,EAAgBH,GAAyB,CAC7CH,EAA4BD,EAAe,YAAaI,CAAK,CAC/D,EAEA,OAAAI,EAAU,IAAM,CACd,SAAeC,GAAY,QAAAC,EAAA,sBACzB,IAAMC,EAAa,MAAMjB,EACvB,IAAI,IAAIF,EAAO,cAAeA,EAAO,OAAO,EAAE,IAChD,EACAe,EAAaI,CAAU,CACzB,GACAF,EAAU,CAEZ,EAAG,CAAC,CAAC,EAGHG,EAAA,cAACzB,EAAY,SAAZ,CACC,MAAO,CAAE,KAAAE,EAAM,QAAAiB,EAAS,UAAAP,EAAW,aAAAQ,EAAc,OAAAf,CAAO,GAEvDC,CACH,CAEJ,CAEO,SAASoB,GAAU,CACxB,OAAOC,EAAW3B,CAAW,CAC/B,CCjEA,OAAO4B,MAAW,QAGH,SAARC,GAAgC,CACrC,GAAM,CAAE,UAAAC,EAAW,OAAAC,CAAO,EAAIC,EAAQ,EAEhCC,EAAYC,EAAM,OAAO,CAC7B,QAASH,GAAA,YAAAA,EAAQ,QACjB,gBAAiB,GACjB,QAAS,CACP,eAAgB,mBAChB,OAAQ,kBACV,CACF,CAAC,EAED,OAAAE,EAAU,aAAa,QAAQ,IAAKF,IAClCA,EAAO,QAAQ,cAAc,EAAID,EAC1BC,EACR,EAEME,CACT,CFfO,SAASE,GAAoB,CAYlC,OAX8BC,GAAiBC,EAAA,sBAC7C,MAAMC,EAAM,IAAIF,CAAI,EACpB,IAAIG,EAAa,GACjB,gBAAS,OAAO,MAAM,GAAG,EAAE,QAASC,GAAW,CACzCA,EAAO,MAAM,GAAG,EAAE,CAAC,EAAE,SAAS,YAAY,IAC5CD,EAAaC,EAAO,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAElD,CAAC,EACMD,CACT,EAGF,CAEA,SAAeE,EACbL,EACAM,EACAC,EACAC,EACA,QAAAP,EAAA,sBACA,GAAI,CACF,OAAO,MAAMM,EAAU,KAAKP,EAAMM,CAAW,EAAE,KAAMG,GAAa,CAChE,GAAIA,EAAS,SAAW,IACtB,OAAAD,EAAQC,EAAS,IAAI,EACd,CAAE,QAAS,EAAK,CAE3B,CAAC,CACH,OAASC,EAAO,CACd,MAAO,CAAE,QAAS,GAAO,MAAOA,CAAM,CACxC,CACF,GAEO,SAASC,GAAW,CACzB,IAAMJ,EAAYK,EAAa,EACzB,CAAE,QAAAJ,EAAS,OAAAK,CAAO,EAAIC,EAAQ,EAUpC,MAAO,CAAE,MATYR,GAAwBL,EAAA,sBAC3C,OAAO,MAAMI,GACXQ,GAAA,YAAAA,EAAQ,WAAY,GACpBP,EACAC,EACAC,CACF,CACF,EAEe,CACjB,CAEO,SAASO,GAAc,CAC5B,IAAMR,EAAYK,EAAa,EACzB,CAAE,QAAAJ,EAAS,OAAAK,CAAO,EAAIC,EAAQ,EAWpC,MAAO,CAAE,SATeR,GAAwBL,EAAA,sBAC9C,OAAO,MAAMI,GACXQ,GAAA,YAAAA,EAAQ,cAAe,GACvBP,EACAC,EACAC,CACF,CACF,EAEkB,CACpB,CAEO,SAASQ,GAAY,CAC1B,IAAMT,EAAYK,EAAa,EACzB,CAAE,QAAAJ,EAAS,OAAAK,CAAO,EAAIC,EAAQ,EAgBpC,MAAO,CAAE,OAdM,IAAYb,EAAA,sBACzB,GAAI,CACF,MAAMM,EAAU,MAAKM,GAAA,YAAAA,EAAQ,YAAa,EAAE,EAAE,KAAMJ,GAAa,CAC/D,GAAIA,EAAS,SAAW,IACtB,oBAAa,WAAW,MAAM,EAC9BD,EAAQ,IAAI,EACL,CAAE,QAAS,EAAK,CAE3B,CAAC,CACH,OAASE,EAAO,CACd,MAAO,CAAE,QAAS,GAAO,MAAOA,CAAM,CACxC,CACF,EAEgB,CAClB","names":["axios","React","createContext","useContext","useEffect","useState","AuthContent","createContext","user","token","AuthProvider","config","children","fetchCsrfToken","useFetchCsrfToken","_setUser","useState","csrf","csrfToken","_setCsrfToken","setFunctionWithLocalStorage","setter","key","value","error","setUser","setCsrfToken","useEffect","fetchCsrf","__async","xsrf_token","React","useAuth","useContext","axios","useApiClient","csrfToken","config","useAuth","apiClient","axios","useFetchCsrfToken","path","__async","axios","xsrf_token","cookie","BasicAuthAPIRequest","requestBody","apiClient","setUser","response","error","useLogin","useApiClient","config","useAuth","useRegister","useLogout"]}