이번 포스트에는 firebase의 Auth를 사용한 로그인 기능 구현에 대해 알아보고자 한다.
우선 다음의 파일을 import 한다.
import React from 'react'
import { useEffect, useState } from 'react'
import { useLocation, useNavigate } from 'react-router-dom'
import {getAuth, signInWithPopup, GoogleAuthProvider, onAuthStateChanged } from 'firebase/auth';
import app from '../firebase'
그다음 함수로 부터 값을 받아올 변수를 설정한다.
const auth = getAuth(app);
const provider = new GoogleAuthProvider(); // new 생성자에 주의
로그인한 기록에 근거하여, 로그인 처리를 한다
기록이 있다면 최상위 '/'로 이동하고, 아니라면 /login으로 이동한다.
const navigate = useNavigate();
useEffect(() => {
onAuthStateChanged(auth, (user) => {
if(user){
navigate("/");
}else{
navigate("/login");
}
console.log(user);
})
return () => {
}
}, [])
const handleAuth = () => {
signInWithPopup(auth, provider)
.then((result) => {
console.log(result);
})
.catch(error => {
console.error(error);
})
}
하지만, 위 코드를 실행해보면 다른 페이지로 이동하려 해도, '/' 최상위 디렉토리로 이동하게 된다
왜냐하면 다른 페이지로 이동해서 URL이 변경되면, useEffect가 호출되어 다시 '/'로 이동하게 되기 때문.
그렇다면 어떻게 수정해야 할까?
if(user){
navigate("/");
}else if (!user && pathname === '/'){
navigate("/login");
}
위 코드와 같이 login 페이지인 경우에만으로 설정하면 된다
'패스트캠퍼스 데브캠프' 카테고리의 다른 글
김민태의 데브캠프 2기 - .d ts 선언 파일 생성하기 (0) | 2024.11.15 |
---|---|
김민태의 데브캠프 2기 - firebase로 배포하기 (0) | 2024.11.14 |
김민태의 데브캠프 2기 - React Portals을 이용하여 모달 생성하기 (0) | 2024.11.14 |
김민태의 데브캠프 2기 - Forward Ref에 대해 알아보자 (1) | 2024.11.13 |
김민태의 데브캠프 2기 - useRef를 이용해서 변수 관리하기 (0) | 2024.11.13 |