| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import Router from 'next/router';
- import axios from 'axios';
- import cookie from 'js-cookie';
- import decodeJwt from 'jwt-decode';
- import {
- SET_DOMAIN,
- SHOW_PAGE_LOADING,
- HIDE_PAGE_LOADING,
- AUTH_USER,
- UNAUTH_USER,
- SENT_VERIFICATION,
- AUTH_ERROR,
- LOGIN_LOADING,
- SIGNUP_LOADING,
- AUTH_RENEW,
- } from './actionTypes';
- const setDomain = payload => ({ type: SET_DOMAIN, payload });
- export const showPageLoading = () => ({ type: SHOW_PAGE_LOADING });
- export const hidePageLoading = () => ({ type: HIDE_PAGE_LOADING });
- export const authUser = payload => ({ type: AUTH_USER, payload });
- export const unauthUser = () => ({ type: UNAUTH_USER });
- export const sentVerification = payload => ({
- type: SENT_VERIFICATION,
- payload,
- });
- export const showAuthError = payload => ({ type: AUTH_ERROR, payload });
- export const showLoginLoading = () => ({ type: LOGIN_LOADING });
- export const showSignupLoading = () => ({ type: SIGNUP_LOADING });
- export const authRenew = () => ({ type: AUTH_RENEW });
- export const signupUser = payload => async dispatch => {
- dispatch(showSignupLoading());
- try {
- const { data: { email } } = await axios.post('/api/auth/signup', payload);
- dispatch(sentVerification(email));
- } catch ({ response }) {
- dispatch(showAuthError(response.data.error));
- }
- };
- export const loginUser = payload => async dispatch => {
- dispatch(showLoginLoading());
- try {
- const { data: { token } } = await axios.post('/api/auth/login', payload);
- cookie.set('token', token, { expires: 7 });
- dispatch(authRenew());
- dispatch(authUser(decodeJwt(token)));
- dispatch(setDomain({ customDomain: decodeJwt(token).domain }));
- dispatch(showPageLoading());
- Router.push('/');
- } catch ({ response }) {
- dispatch(showAuthError(response.data.error));
- }
- };
- export const logoutUser = () => dispatch => {
- dispatch(showPageLoading());
- cookie.remove('token');
- dispatch(unauthUser());
- Router.push('/login');
- };
- export const renewAuthUser = () => async (dispatch, getState) => {
- if (getState().auth.renew) {
- return;
- }
- const options = {
- method: 'POST',
- headers: { Authorization: cookie.get('token') },
- url: '/api/auth/renew',
- };
- try {
- const { data: { token } } = await axios(options);
- cookie.set('token', token, { expires: 7 });
- dispatch(authRenew());
- dispatch(authUser(decodeJwt(token)));
- dispatch(setDomain({ customDomain: decodeJwt(token).domain }));
- } catch (error) {
- cookie.remove('token');
- dispatch(unauthUser());
- }
- };
|