import React, { createContext, useState } from "react"; import Router from 'next/router' import { setCookie } from "nookies"; import { signInRequest } from "../services/auth"; import { api } from "../services/api"; type UserType = { name: string; email: string; avatar_url: string; } type SignInData = { email: string; password: string; } type AuthContextType = { isAuthenticated: boolean; user: UserType; signIn: (data: SignInData) => Promise; } export const AuthContext = createContext({} as AuthContextType) export function AuthProvider({children}: {children: React.ReactNode}) { const [user, setUser] = useState(null) const isAuthenticated = !!user async function signIn({email, password}: SignInData) { const { token, user, exception }: any = await signInRequest({ email, password }) if (token) setCookie(undefined, '@smartAuth-token', token, { maxAge: 60 * 60 * 1, // 1 hour }) if (user.role) setCookie(undefined, 'user-role', user.role) if (user.id) setCookie(undefined, 'user-id', user.id) console.log(user) if (!exception) { if (user.role == 2) { Router.push('/dashboard') } else { Router.push('administrative/clients') } return; } else { return } api.defaults.headers['Authorization'] = `Bearer ${token}` setUser(user) } return ( {children} ) }