인터셉터로 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. 세션에서 username과 authKey를 가져옴
2. revel.Verify 함수로 authKey가 유효한지 확인
3. authKey가 유효하면 username으로 사용자를 조회하고 컨트롤러의 CurrentUser에 저장
4. 뷰에서 currentUser를 사용할 수 있게 RenderArgs에 CurrentUser를 추가