Closed aopontann closed 1 year ago
これから新しくハンドラ関数を作成するときは、user_handler.go
の GetUserId
が参考になると思います。
func (s *Server) GetUserId(c *gin.Context) {
// Authentication()でセットしたメールアドレスを取得
email := c.MustGet("email").(string)
uid, err := s.q.GetUserId(context.Background(), email)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"id": uid, "email": email})
}
server.go
で /api/user/*
以下にアクセスしたとき、ハンドラ関数を実行する前にミドルウェアを実行するようにしました。
//// 仮で作成 セッションの説明用 ////
// グループを作成
usr := api.Group("/user")
// /api/user/* リンクにアクセスしたとき、登録したハンドラ関数(ここではGetUserId)を実行する前に Authentication() を実行するようにする処理
usr.Use(s.Authentication())
// ユーザIDのみ返すAPI
usr.GET("/id", s.GetUserId)
oauth_google.go
に Authentication()
を作成しました。
func (s *Server) Authentication() gin.HandlerFunc {
return func(c *gin.Context) {
// CookieにセットされたセッションIDを使い、redisからユーザのメールアドレスを取得する
sid, _ := c.Cookie("session_id")
email, err := s.rbd.Get(context.Background(), sid).Result()
if err != nil {
c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()})
c.Abort()
}
// 次に実行されるハンドラ関数で取得したメールアドレスを使うための処理
c.Set("email", email)
}
}
c.Set("email", email)
で次に実行されるハンドラ関数でメールアドレスを使えるようにします。
次に実行されたハンドラ関数でemail := c.MustGet("email").(string)
とすることでメールアドレスを取得することができます。
このような流れになるかと思います。 何か不明点などあれば教えてください!
一旦マージします
ありがとうございます!LGTM!
closes #35
概要
動作確認
既にユーザ登録を済ませている状態