Web/Basic (Front-end)

[#7] HOC๋ฅผ ์ด์šฉํ•œ Auth

๐Ÿ“’HOC?

  • Higher Order Component
  • ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ›์•„์„œ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌํ„ดํ•จ.

 

๐Ÿ“’HOC ๋™์ž‘ ๊ตฌ์กฐ

  • Auth๋ผ๋Š” HOC์—์„œ Back-end์— Request๋ฅผ ๋‚ ๋ ค์„œ ํ˜„์žฌ ํŽ˜์ด์ง€์— ๋“ค์–ด์™€์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ƒํƒœ์ •๋ณด(Admin ์œ ์ €์ธ์ง€, ๋กœ๊ทธ์ธ๋œ ์œ ์ €์ธ์ง€, ๋กœ๊ทธ์ธ์ด ์•ˆ๋œ ์œ ์ €์ธ์ง€) ๋ฅผ ๊ฐ€์ ธ์˜ด.
  • ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ž๊ฒฉ์ด ๋˜๋Š” ์œ ์ €๋ฉด ๋“ค์—ฌ๋ณด๋‚ด๊ณ , ์ž๊ฒฉ์ด ์•ˆ๋˜๋Š” ์œ ์ €๋ฉด ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ณด๋‚ด๋ฒ„๋ฆผ.

ex) *ํŽ˜์ด์ง€ ์ž๊ฒฉ

  • ์•„๋ฌด๋‚˜ ์ง„์ž… ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€: Landing Page, About Page
  • ๋กœ๊ทธ์ธํ•œ ํšŒ์›๋งŒ ์ง„์ž… ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€: Detail Page
  • ๋กœ๊ทธ์ธํ•œ ํšŒ์›์€ ์ง„์ž… ๋ถˆ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€: Regitser Page, Login Page
  • ๊ด€๋ฆฌ์ž๋งŒ ์ง„์ž… ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€: Admin Page

 

๐Ÿ“’์†Œ์Šค์ฝ”๋“œ

  • Server/index.js ์—์„œ get('/api/users/auth')๋กœ API๋ฅผ ๋งŒ๋“ค์–ด ๋‘์—ˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— Request๋ฅผ ์ฃผ๋ฉด,  
    auth middleware์—์„œ ํ† ํฐ์„ ์ด์šฉํ•ด ๋„ฃ์–ด๋‘” ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•ด ์œ ์ €์˜ ์ž๊ฒฉ์„ ํŒ๋‹จํ•จ.
  • [client/src/App.js]
    function App() {
      return (
        <Router>
          <div>
            <Switch>
            {/* Auth HOC๋กœ ๊ฐ์‹ธ์•ผ ํ•จ.  */}
              <Route exact path="/" component={Auth(LandingPage, null)} /> 
              <Route exact path="/login" component={Auth(LoginPage, false)} />
              <Route exact path="/register" component={Auth(RegisterPage, false)} />
            </Switch>
          </div>
        </Router>
      );
    }โ€‹