Refactor setUserToken into two methods

This refactors `setUserToken` into `accountCookie`, which just returns a cookie if it exists, and `setHeaders`, which sets the Axios header defaults.

Then, we update the calls in all the required files.
This commit is contained in:
Justin Edmund 2023-01-31 00:18:54 -08:00
parent 714acbed35
commit d32293995b
10 changed files with 31 additions and 24 deletions

View file

@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next'
import axios, { AxiosError, AxiosResponse } from 'axios' import axios, { AxiosError, AxiosResponse } from 'axios'
import api from '~utils/api' import api from '~utils/api'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import { accountState } from '~utils/accountState' import { accountState } from '~utils/accountState'
import Button from '~components/Button' import Button from '~components/Button'
@ -147,7 +147,7 @@ const LoginModal = (props: Props) => {
setCookie('account', cookieObj, { path: '/', expires: expiresAt }) setCookie('account', cookieObj, { path: '/', expires: expiresAt })
// Set Axios default headers // Set Axios default headers
setUserToken() setHeaders()
} }
function storeUserInfo(response: AxiosResponse) { function storeUserInfo(response: AxiosResponse) {

View file

@ -5,7 +5,7 @@ import { useTranslation } from 'next-i18next'
import { AxiosResponse } from 'axios' import { AxiosResponse } from 'axios'
import api from '~utils/api' import api from '~utils/api'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import { accountState } from '~utils/accountState' import { accountState } from '~utils/accountState'
import Button from '~components/Button' import Button from '~components/Button'
@ -103,7 +103,7 @@ const SignupModal = (props: Props) => {
setCookie('account', cookieObj, { path: '/', expires: expiresAt }) setCookie('account', cookieObj, { path: '/', expires: expiresAt })
// Set Axios default headers // Set Axios default headers
setUserToken() setHeaders()
} }
function fetchUserInfo(id: string) { function fetchUserInfo(id: string) {

View file

@ -9,7 +9,7 @@ import api from '~utils/api'
import extractFilters from '~utils/extractFilters' import extractFilters from '~utils/extractFilters'
import fetchLatestVersion from '~utils/fetchLatestVersion' import fetchLatestVersion from '~utils/fetchLatestVersion'
import organizeRaids from '~utils/organizeRaids' import organizeRaids from '~utils/organizeRaids'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import useDidMountEffect from '~utils/useDidMountEffect' import useDidMountEffect from '~utils/useDidMountEffect'
import { appState } from '~utils/appState' import { appState } from '~utils/appState'
import { elements, allElement } from '~data/elements' import { elements, allElement } from '~data/elements'
@ -329,7 +329,7 @@ export const getServerSidePaths = async () => {
// prettier-ignore // prettier-ignore
export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => { export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => {
// Set headers for server-side requests // Set headers for server-side requests
setUserToken(req, res) setHeaders(req, res)
// Fetch latest version // Fetch latest version
const version = await fetchLatestVersion() const version = await fetchLatestVersion()

View file

@ -7,7 +7,7 @@ import type { AppProps } from 'next/app'
import Layout from '~components/Layout' import Layout from '~components/Layout'
import { accountState } from '~utils/accountState' import { accountState } from '~utils/accountState'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import '../styles/globals.scss' import '../styles/globals.scss'
import { ToastProvider, Viewport } from '@radix-ui/react-toast' import { ToastProvider, Viewport } from '@radix-ui/react-toast'
@ -23,9 +23,9 @@ function MyApp({ Component, pageProps }: AppProps) {
} }
useEffect(() => { useEffect(() => {
setUserToken()
if (accountCookie) { if (accountCookie) {
setHeaders()
console.log(`Logged in as user "${cookieData.account.username}"`) console.log(`Logged in as user "${cookieData.account.username}"`)
accountState.account.authorized = true accountState.account.authorized = true

View file

@ -6,7 +6,7 @@ import { useTranslation } from 'next-i18next'
import { serverSideTranslations } from 'next-i18next/serverSideTranslations' import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import { AboutTabs } from '~utils/enums' import { AboutTabs } from '~utils/enums'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import AboutPage from '~components/AboutPage' import AboutPage from '~components/AboutPage'
import UpdatesPage from '~components/UpdatesPage' import UpdatesPage from '~components/UpdatesPage'
@ -160,7 +160,7 @@ export const getServerSidePaths = async () => {
// prettier-ignore // prettier-ignore
export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => { export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => {
// Set headers for server-side requests // Set headers for server-side requests
setUserToken(req, res) setHeaders(req, res)
// Fetch and organize raids // Fetch and organize raids
return { return {

View file

@ -10,7 +10,7 @@ import NewHead from '~components/NewHead'
import api from '~utils/api' import api from '~utils/api'
import fetchLatestVersion from '~utils/fetchLatestVersion' import fetchLatestVersion from '~utils/fetchLatestVersion'
import organizeRaids from '~utils/organizeRaids' import organizeRaids from '~utils/organizeRaids'
import setUserToken from '~utils/setUserToken' import { accountCookie, setHeaders } from '~utils/userToken'
import { appState, initialAppState } from '~utils/appState' import { appState, initialAppState } from '~utils/appState'
import { groupWeaponKeys } from '~utils/groupWeaponKeys' import { groupWeaponKeys } from '~utils/groupWeaponKeys'
@ -119,8 +119,8 @@ export const getServerSidePaths = async () => {
// prettier-ignore // prettier-ignore
export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => { export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => {
// Set headers for server-side requests // Set headers for API calls
setUserToken(req, res) setHeaders(req, res)
// Fetch latest version // Fetch latest version
const version = await fetchLatestVersion() const version = await fetchLatestVersion()

View file

@ -10,7 +10,7 @@ import api from '~utils/api'
import elementEmoji from '~utils/elementEmoji' import elementEmoji from '~utils/elementEmoji'
import fetchLatestVersion from '~utils/fetchLatestVersion' import fetchLatestVersion from '~utils/fetchLatestVersion'
import organizeRaids from '~utils/organizeRaids' import organizeRaids from '~utils/organizeRaids'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import { appState } from '~utils/appState' import { appState } from '~utils/appState'
import { groupWeaponKeys } from '~utils/groupWeaponKeys' import { groupWeaponKeys } from '~utils/groupWeaponKeys'
@ -108,7 +108,7 @@ export const getServerSidePaths = async () => {
// prettier-ignore // prettier-ignore
export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => { export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => {
// Set headers for server-side requests // Set headers for server-side requests
setUserToken(req, res) setHeaders(req, res)
// Fetch latest version // Fetch latest version
const version = await fetchLatestVersion() const version = await fetchLatestVersion()

View file

@ -7,7 +7,7 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import clonedeep from 'lodash.clonedeep' import clonedeep from 'lodash.clonedeep'
import api from '~utils/api' import api from '~utils/api'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import extractFilters from '~utils/extractFilters' import extractFilters from '~utils/extractFilters'
import fetchLatestVersion from '~utils/fetchLatestVersion' import fetchLatestVersion from '~utils/fetchLatestVersion'
import organizeRaids from '~utils/organizeRaids' import organizeRaids from '~utils/organizeRaids'
@ -363,7 +363,7 @@ export const getServerSidePaths = async () => {
// prettier-ignore // prettier-ignore
export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => { export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => {
// Set headers for server-side requests // Set headers for server-side requests
setUserToken(req, res) setHeaders(req, res)
// Fetch latest version // Fetch latest version
const version = await fetchLatestVersion() const version = await fetchLatestVersion()

View file

@ -7,7 +7,7 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import clonedeep from 'lodash.clonedeep' import clonedeep from 'lodash.clonedeep'
import api from '~utils/api' import api from '~utils/api'
import setUserToken from '~utils/setUserToken' import { setHeaders } from '~utils/userToken'
import extractFilters from '~utils/extractFilters' import extractFilters from '~utils/extractFilters'
import fetchLatestVersion from '~utils/fetchLatestVersion' import fetchLatestVersion from '~utils/fetchLatestVersion'
import organizeRaids from '~utils/organizeRaids' import organizeRaids from '~utils/organizeRaids'
@ -363,7 +363,7 @@ export const getServerSidePaths = async () => {
// prettier-ignore // prettier-ignore
export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => { export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => {
// Set headers for server-side requests // Set headers for server-side requests
setUserToken(req, res) setHeaders(req, res)
// Fetch latest version // Fetch latest version
const version = await fetchLatestVersion() const version = await fetchLatestVersion()

View file

@ -2,17 +2,24 @@ import axios from 'axios'
import { getCookie } from 'cookies-next' import { getCookie } from 'cookies-next'
import type { NextApiRequest, NextApiResponse } from 'next' import type { NextApiRequest, NextApiResponse } from 'next'
export default ( export const accountCookie = (
req: NextApiRequest | undefined = undefined, req: NextApiRequest | undefined = undefined,
res: NextApiResponse | undefined = undefined res: NextApiResponse | undefined = undefined
) => { ) => {
// Set up cookies
const options = req && res ? { req, res } : {} const options = req && res ? { req, res } : {}
const cookie = getCookie('account', options) const cookie = getCookie('account', options)
return cookie ? cookie : undefined
}
export const setHeaders = (
req: NextApiRequest | undefined = undefined,
res: NextApiResponse | undefined = undefined
) => {
const cookie = accountCookie(req, res)
if (cookie) { if (cookie) {
axios.defaults.headers.common['Authorization'] = `Bearer ${ const parsed = JSON.parse(cookie as string)
JSON.parse(cookie as string).token if (parsed.token)
}` axios.defaults.headers.common['Authorization'] = `Bearer ${parsed.token}`
} else { } else {
delete axios.defaults.headers.common['Authorization'] delete axios.defaults.headers.common['Authorization']
} }