Skip to content
Snippets Groups Projects
useAuth.ts 1.28 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { useContext, useState } from 'react'
    
    import axios from 'axios'
    
    import { UserContext } from './userContext'
    import { useHistory } from 'react-router-dom'
    
    
    export interface Auth {
    
      loginUser: () => Promise<void>
    
      error: null
    
      logoutUser: () => void
    
    }
    export const useAuth = (): Auth => {
      const [error, setError] = useState(null)
    
      const { setUser } = useContext(UserContext)
      const history = useHistory()
    
      //login user
    
      const loginUser = async (): Promise<void> => {
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
          await axios.get(`${process.env.PUBLIC_URL}OAuth2Login`, {
            withCredentials: true,
          })
    
        } catch (e) {
          setError(e)
        }
      }
    
      const logoutUser = async (): Promise<void> => {
        try {
          if (setUser) setUser(null)
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
          await axios.get(`${process.env.PUBLIC_URL}Logout`)
    
      //set user in context and push them home
      const setUserContext = async (): Promise<void> => {
        try {
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
          const { data } = await axios.get(
            `${process.env.PUBLIC_URL}api/common/WhoAmI`,
            {
              withCredentials: true,
            }
          )
    
          if (data && setUser) {
            setUser(data)
            history.push('/editing')
    
      return { loginUser, error, logoutUser }