Initial commit, repo migration
This commit is contained in:
+118
@@ -0,0 +1,118 @@
|
||||
import { LoginPost, LogoutGet } from '@/services/auth-service'
|
||||
import { useRouter } from 'next/router'
|
||||
import { destroyCookie, parseCookies, setCookie } from 'nookies'
|
||||
import { useEffect } from 'react'
|
||||
import { useDispatch } from 'react-redux'
|
||||
import { UPDATE_NAME } from 'store/userSlice'
|
||||
import Swal from 'sweetalert2'
|
||||
import axios from '../lib/axios'
|
||||
|
||||
export const useAuth = ({ middleware, redirectIfAuthenticated }) => {
|
||||
const router = useRouter()
|
||||
const { token } = parseCookies()
|
||||
const dispatch = useDispatch()
|
||||
|
||||
useEffect(() => {
|
||||
if (middleware === 'guest' && redirectIfAuthenticated && token) router.push(redirectIfAuthenticated)
|
||||
if (middleware === 'auth' && !token) logout()
|
||||
}, [token])
|
||||
|
||||
const login = async ({ toast, setLoading, ...props }) => {
|
||||
LoginPost(props)
|
||||
.then((res) => {
|
||||
setLoading(false)
|
||||
if (res.status === 'ok') {
|
||||
setCookie(null, 'token', res.data.jwt, {
|
||||
path: '/',
|
||||
maxAge: res.data.token_expiry,
|
||||
})
|
||||
localStorage.setItem('menus', JSON.stringify(res.data.user_access))
|
||||
localStorage.setItem('user', JSON.stringify(res.data))
|
||||
} else {
|
||||
// eslint-disable-next-line no-undef
|
||||
grecaptcha.reset()
|
||||
toast.current.show({ severity: 'error', summary: 'Error Message', detail: res.message })
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
// eslint-disable-next-line no-undef
|
||||
grecaptcha.reset()
|
||||
setLoading(false)
|
||||
switch (err.response.status) {
|
||||
case 401:
|
||||
toast.current.show({
|
||||
severity: 'error',
|
||||
summary: 'Error Message',
|
||||
detail: 'Your account used on another device.',
|
||||
})
|
||||
break
|
||||
|
||||
default:
|
||||
toast.current.show({ severity: 'error', summary: 'Error Message', detail: err })
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const forgotPassword = async ({ ...props }) => {
|
||||
axios
|
||||
.post('/security/forgotPassword ', props)
|
||||
.then((response) => {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Forgot Password',
|
||||
text: response.data.message,
|
||||
width: '25rem',
|
||||
timer: 3000,
|
||||
timerProgressBar: true,
|
||||
}).then(() => {
|
||||
router.push('/')
|
||||
})
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err)
|
||||
})
|
||||
}
|
||||
|
||||
const resetPassword = async ({ ...props }) => {
|
||||
axios
|
||||
.post('/security/resetPassword ', props)
|
||||
.then((response) => {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Reset Password',
|
||||
text: response.data.message,
|
||||
width: '25rem',
|
||||
timer: 3000,
|
||||
timerProgressBar: true,
|
||||
}).then(() => {
|
||||
router.push('/')
|
||||
})
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err)
|
||||
})
|
||||
}
|
||||
|
||||
const logout = async () => {
|
||||
LogoutGet()
|
||||
.then((res) => {
|
||||
if (res.status === 'ok') {
|
||||
destroyCookie(null, 'token', { path: '/' })
|
||||
localStorage.removeItem('menus')
|
||||
localStorage.removeItem('user')
|
||||
dispatch(UPDATE_NAME(''))
|
||||
router.push('/')
|
||||
}
|
||||
})
|
||||
.catch((err) => console.log(err))
|
||||
}
|
||||
|
||||
return {
|
||||
// user,
|
||||
login,
|
||||
logout,
|
||||
forgotPassword,
|
||||
resetPassword,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user