AuthReducer.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const jwtDecode = token => {
  2. try {
  3. let arrToken = token.split('.')
  4. let base64Token = atob(arrToken[1])
  5. return JSON.parse(base64Token)
  6. }
  7. catch (e) {
  8. console.log(e.message());
  9. }
  10. }
  11. export const AuthReducer = (state, { type, token }) => {
  12. if (!state) {
  13. if (localStorage.authToken) {
  14. type = 'AUTH_LOGIN'
  15. token = localStorage.authToken
  16. } else state = {}
  17. }
  18. if (type === 'AUTH_LOGIN') {
  19. localStorage.setItem('authToken', token)
  20. let payload = jwtDecode(token)
  21. if (typeof payload === 'object') {
  22. localStorage.setItem('userId', payload?.sub?.id)
  23. return {
  24. ...state,
  25. token,
  26. payload
  27. }
  28. } else return state
  29. }
  30. if (type === 'AUTH_LOGOUT') {
  31. localStorage.removeItem('authToken')
  32. localStorage.removeItem('userId')
  33. return {}
  34. }
  35. return state
  36. }
  37. export const actionAuthLogin = token => ({ type: 'AUTH_LOGIN', token })
  38. export const actionAuthLogout = () => ({ type: 'AUTH_LOGOUT' })