| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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());
- }
- };
|