더북(TheBook)

인터셉터로 CurrentUser 세팅

CurrentUser를 생성하는 기능을 인터셉터로 등록해 보자. app/controllers/app.go 파일에 다음 코드를 추가한다.

▼ app/controllers/app.go

func (c *App) setCurrentUser() revel.Result {
    // 뷰에서 currentUser를 사용할 수 있게 RenderArgs에 CurrentUser를 추가
    defer func() {
        if c.CurrentUser != nil {
            c.RenderArgs["currentUser"] = c.CurrentUser
        } else {
            delete(c.RenderArgs, "currentUser")
        }
    }()
     
    // 세션에서 username과 authKey를 가져옴
    username, ok := c.Session["username"]
    if !ok || username == "" {
        return nil
    }
     
    authKey, ok := c.Session["authKey"]
    if !ok || authKey == "" {
        return nil
    }
     
    // revel.Verify 함수로 authKey가 유효한지 확인
    // authKey가 유효하면 username으로 사용자를 조회하고 컨트롤러의 CurrentUser에 저장
    if match := revel.Verify(username, authKey); match {
        var user models.User
        c.Txn.Where(&models.User{Username: username}).First(&user)
        if &user != nil {
            c.CurrentUser = &user
        }
    }
    return nil
}

setCurrentUser 메서드에서 하는 일은 다음과 같다.

1. 세션에서 usernameauthKey를 가져옴

2. revel.Verify 함수로 authKey가 유효한지 확인

3. authKey가 유효하면 username으로 사용자를 조회하고 컨트롤러의 CurrentUser에 저장

4. 뷰에서 currentUser를 사용할 수 있게 RenderArgsCurrentUser를 추가

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