더북(TheBook)

인증 처리 미들웨어 생성

이번에는 인증된 웹 요청만 허용하게 하는 미들웨어를 직접 만들어 보자.

main.go 파일에 AuthHandler를 정의해 보자. AuthHandler는 쿠키 값을 확인해서 인증이 확인되면 다음 핸들러로 넘어가고, 인증이 확인되지 않으면 로그인 페이지로 이동한다. 만약 요청 경로가 ignore에 등록된 URL이면 인증을 확인하지 않고 바로 다음 핸들러로 넘어간다.

▼ main.go

const VerifyMessage = “verified”
 
func AuthHandler(next HandlerFunc) HandlerFunc {
    ignore := []string{”/login”, “public/index.html”}
    return func(c *Context) {
        // url prefix가 “/login”, “public/index.html”이면 auth를 체크하지 않음
        for _, s := range ignore {
            if strings.HasPrefix(c.Request.URL.Path, s) {
                next(c)
                return
            }
        }
 
if v, err := c.Request.Cookie(“X_AUTH”); err == http.ErrNoCookie { // “X_AUTH” 쿠키 값이 없으면 “/login”으로 이동 c.Redirect(”/login”) return } else if err != nil { // 에러 처리 c.RenderErr(http.StatusInternalServerError, err) return } else if Verify(VerifyMessage, v.Value) { // 쿠키 값으로 인증이 확인되면 다음 핸들러로 넘어감 next(c) return }
// “/login”으로 이동 c.Redirect(”/login”) } } // 인증 토큰 확인 func Verify(message, sig string) bool { return hmac.Equal([]byte(sig), []byte(Sign(message))) }

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.