robert-min / project-go

Go 언어 리뷰와 기존에 파이썬으로 진행했던 프로젝트를 Go 언어로 개선한 repo
0 stars 0 forks source link

Feat/add login : 로그인 기능 추가 #4

Closed robert-min closed 1 year ago

robert-min commented 1 year ago

주요변경점

상세변경점

SQL DB 테이블 추가

feat: Sql DB테이블 생성 구현

type User struct {
    ID       string    `json:"id"`
    Password string    `json:"password"`
    CreateAt time.Time `json:"created_at"`
}

User 등록, 조회, 삭제 api 추가

feat: user 등록 기능 추가 feat: user 확인 기능 추가 feat: delete 기능 추가

func (s *sqliteHandler) GetUser(id string) User {
    rst := s.db.QueryRow("SELECT * FROM users WHERE id = $1", id)
    var user User
    rst.Scan(&user.ID, &user.Password, &user.CreateAt)
    return user
}

func (s *sqliteHandler) AddNewUser(id string, password string) *User {
    stmt, err := s.db.Prepare("INSERT INTO users (id, password, createdAt) VALUES (?, ?, datetime('now'))")
    errorHandler(err)
    _, err = stmt.Exec(id, password)
    errorHandler(err)
    var user User
    user.ID = id
    user.Password = password
    user.CreateAt = time.Now()
    return &user

}

func (s *sqliteHandler) DeleteUser(id string) string {
    stmt, err := s.db.Prepare("DELETE FROM users WHERE id = ?")
    errorHandler(err)
    _, err = stmt.Exec(id)
    errorHandler(err)
    return id
}

func (s *sqliteHandler) Close() {
    s.db.Close()
}

로그인 - JWT 토큰 생성

feat: login jwt token 추가 이슈: jwt 서명 오류

func setConfig() *Config {
    path, _ := os.Getwd()

    var config Config
    file, err := os.Open(path + "/login-api/backend/conf/conf.json")
    if err != nil {
        fmt.Println("Can't Open", err.Error())
        panic(err)
    }
    defer file.Close()
    jsonParser := json.NewDecoder(file)
    jsonParser.Decode(&config)
    return &config
}

func newClaim(userID string) *jwt.StandardClaims {
    return &jwt.StandardClaims{
        ExpiresAt: 15000,
        Issuer:    userID,
    }
}

func creatToken(id string) string {
    at := newClaim(id)
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, at)
    config := setConfig()

    key := []byte(config.Secret_key)
    signedToken, err := token.SignedString(key)
    if err != nil {
        fmt.Println("Error signing token ", err.Error())
        panic(err)
    }

    return signedToken
}