[TypeScript] ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ํ—ค๋” ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ
728x90

Today, What I learned?

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ์„œ ํ—ค๋”๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋…ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

์ด ๋ถ€๋ถ„์˜ ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ์งค ๊ฒƒ์ธ ๊ฐ€์— ๋Œ€ํ•œ ์–•์€ ๊ณ ์ฐฐ...

 

 

๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„

๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ๋ณด์ด๋Š” ํ—ค๋”๋ฅผ,

๋กœ๊ทธ์ธ์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ฒ€์ƒ‰๊ณผ ๋งˆ์ดํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์•„์ด์ฝ˜์ด ์žˆ๋Š” ํ—ค๋”๋ฅผ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

 

์ฒซ ์‹œ๋„

์ฒ˜์Œ์—๋Š” useState๋ฅผ ์ด์šฉํ•ด์„œ isLoggedIn ์ด๋ผ๋Š” boolean ๊ฐ’์˜ ์ƒํƒœ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

const [isLoggedIn, setIsLoggedIn] = useState<boolean>(false);

...

useEffect(()=>{
  authService.onAuthStateChanged((user) => {
      if (user) {
        setIsLoggedIn(true);
      } else {
        setIsLoggedIn(false);
      }
    });
},[]);


...
 {/* ๋น„ ๋กœ๊ทธ์ธ ์‹œ */}
      {!isLoggedIn && (
        <Button type="button" onClick={goToLogin}>
          ๋กœ๊ทธ์ธ
        </Button>
      )}

      {/* ๋กœ๊ทธ์ธ ์‹œ */}
      {isLoggedIn && (
        <Icons>
          <SearchIcon />
          <Link to={'/mypage'}>
            <UserIcon />
          </Link>
        </Icons>

๊ทผ๋ฐ ์ฒ˜์Œ์—” false๊ฐ€ ๊ธฐ๋ณธ์ด๋‹ค๋ณด๋‹ˆ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋”๋ผ๋„ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ๋ช‡ ์ดˆ ๋ณด์˜€๋‹ค๊ฐ€ ์•„์ด์ฝ˜์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ํ˜„์ƒ์ด ์žˆ์–ด์„œ ๋ณด๋ฅ˜...

 

 

 

๋‘ ๋ฒˆ์งธ ์‹œ๋„

์ผ๋‹จ ํ˜„์žฌ ์ˆ˜์ •์•ˆ์ธ๋ฐ, ์ƒํƒœ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ currentUser๊ฐ€ ์žˆ๋Š” ์ง€๋ฅผ ํŒŒ์•…ํ•ด์„œ ๋ Œ๋”๋ง ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 {/* ๋น„ ๋กœ๊ทธ์ธ ์‹œ */}
      {!authService?.currentUser && (
        <Button type="button" onClick={goToLogin}>
          ๋กœ๊ทธ์ธ
        </Button>
      )}

      {/* ๋กœ๊ทธ์ธ ์‹œ */}
      {authService?.currentUser && (
        <Icons>
          <SearchIcon />
          <Link to={'/mypage'}>
            <UserIcon />
          </Link>
        </Icons>

์ผ๋‹จ ๋ฆฌ์•กํŠธ๋Š” ๊ธฐ๋ณธ์ด SPA๋‹ˆ๊นŒ ํŽ˜์ด์ง€ ์ด๋™ ์‹œ์— ๋Šฆ์ถฐ์ง€๋Š” ๊ฒƒ ์—†์ด ๋ฐ”๋กœ๋ฐ”๋กœ ํ—ค๋”๊ฐ€ ๋ Œ๋”๋ง ๋˜๊ธด ํ•œ๋‹ค.

 

๋ฌธ์ œ๋Š” ์ƒˆ๋กœ๊ณ ์นจ ํ–ˆ์„ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํ—ค๋”๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ!..
(๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๊ฐ€๋ฉด ๋‹ค์‹œ ๋กœ๊ทธ์ธ ์ƒํƒœ๋กœ ๋‚˜์˜ค๊ธด ํ•œ๋‹ค)

์ƒˆ๋กœ๊ณ ์นจ ํ›„ ๋ถ€ํ„ฐ ๋…นํ™”๋จ ;;

 

๊ฒฐ๋ก ์ ์œผ๋กœ ์ƒˆ๋กœ๊ณ ์นจ ํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€๊ฐ€ ํ•„์š”ํ•œ ๊ฑด๋ฐ, ์ผ๋‹จ ๋กœ๊ทธ์ธํ•  ๊ฒฝ์šฐ ์„ธ์…˜์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ๋˜๋Š” ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ๋„ฃ์–ด๋‘์—ˆ๋‹ค.

 setPersistence(authService, browserSessionPersistence)
      .then(() =>
        signInWithEmailAndPassword(authService, auth.email, auth.password),
      )
      .then(() => {
        ... 

์„ธ์…˜์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•œ ๊ฒƒ์„ ์ด์šฉํ•ด์„œ apiKey๋ฅผ ๋ฆฌ๋•์Šค์— ์ €์žฅํ•œ๋‹ค๋˜๊ฐ€.. ์ด๋Ÿฐ ์‹œ๋„๋ฅผ ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.

์•„์ง ์™„์ „ํžˆ ๋๋‚œ ๊ฒŒ ์•„๋‹˜!..

 

 

++++

๋ฐ”๋กœ ๋‹ค์Œ ๋‚ .. ์„ธ์…˜์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•œ ๊ฐ’์œผ๋กœ ์ƒˆ๋กœ๊ณ ์นจ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ–ˆ๋‹ค!


์„ธ์…˜์Šคํ† ๋ฆฌ์ง€ ์“ฐ๋Š” ๊ฐ’์ด ์ด ์ •๋ณด๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— key(0) ์ด๋ผ๋Š” ์ธ๋ฑ์Šค๋กœ ์ง€์ •ํ•ด ์คฌ์ง€๋งŒ, ํŒŒ์ด์–ด๋ฒ ์ด์Šค apikey๋ฅผ ๋„ฃ์–ด์„œ
firebase:authUser:ํŒŒ์ด์–ด๋ฒ ์ด์Šค API key:[DEFAULT] ๋ผ๋Š” ๊ฐ’์œผ๋กœ ํ‚ค๋ฅผ ์ง€์ •ํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

  // ๋กœ๊ทธ์ธ ํ™•์ธ์„ ์œ„ํ•œ ์„ธ์…˜์Šคํ† ๋ฆฌ์ง€ ํ‚ค ํ™•์ธ
  const isLoggedIn = sessionStorage.key(0);

 

 

์•„๋ฌดํŠผ ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ์ด ๋˜์–ด์žˆ๋Š๋ƒ์— ๋”ฐ๋ผ ํ—ค๋” ์•„์ด์ฝ˜ ๋ถ€๋ถ„์„ ๋ Œ๋”๋ง ํ•ด์ค€๋‹ค.

 {/* ๋น„ ๋กœ๊ทธ์ธ ์‹œ */}
      {!isLoggedIn && (
        <Button type="button" onClick={goToLogin}>
          ๋กœ๊ทธ์ธ
        </Button>
      )}

      {/* ๋กœ๊ทธ์ธ ์‹œ */}
      {isLoggedIn && (
        <Icons>
          <SearchIcon />
          <Link to={'/mypage'}>
            <UserIcon />
          </Link>
        </Icons>
      )}
      ...

 

์ด์ œ ์ƒˆ๋กœ๊ณ ์นจ ํ•ด๋„ ํ—ค๋” ๋ถ€๋ถ„์ด ์ž˜ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

728x90