useAuth.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. 'use client';
  2. import { useAuthContext } from '@/contexts/authProvider';
  3. import { useMemberContext } from '@/contexts/memberProvider';
  4. import { fetchLogout } from '@/lib/api/auth';
  5. import { fetchMemberInfo } from '@/lib/api/account';
  6. import { getAccessToken } from '@/lib/utils/server';
  7. import { decodeAccessToken, throwError } from '@/lib/utils/client';
  8. export default function useAuth()
  9. {
  10. const { isAuthenticated, isLoading, setIsAuthenticated, checkAuth } = useAuthContext();
  11. const { member, setMember } = useMemberContext();
  12. // 로그인
  13. const login = async (rememberMe: boolean) => {
  14. const accessToken = await getAccessToken();
  15. if (!accessToken) {
  16. return;
  17. }
  18. const tokenData = decodeAccessToken(accessToken);
  19. if (!tokenData) {
  20. return;
  21. }
  22. try {
  23. const res = await fetchMemberInfo();
  24. throwError(res);
  25. setIsAuthenticated(true);
  26. setMember(res.data);
  27. localStorage.setItem('rememberMe', rememberMe.toString());
  28. localStorage.setItem("member", JSON.stringify(res.data));
  29. location.replace('/');
  30. } catch (err) {
  31. console.error('로그인 처리 중 오류:', err);
  32. }
  33. };
  34. // 로그아웃
  35. const logout = async () => {
  36. const res = await fetchLogout();
  37. if (res.success) {
  38. setIsAuthenticated(false);
  39. alert('로그아웃 되었습니다.');
  40. localStorage.setItem('rememberMe', "false");
  41. localStorage.removeItem('member');
  42. location.replace('/');
  43. }
  44. };
  45. // 로그인 여부 확인
  46. const isLoggedIn = async () => {
  47. const res = await checkAuth();
  48. if (!res) {
  49. if (confirm('로그인 후 이용해주세요.\n\n로그인 하시겠습니까?')) {
  50. location.href = '/login';
  51. } else {
  52. return false;
  53. }
  54. } else {
  55. return true;
  56. }
  57. };
  58. return { isAuthenticated, isLoading, login, logout, member, isLoggedIn };
  59. }