質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

1回答

3037閲覧

ginでクッキーをページで共有したい

marny12345

総合スコア17

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/05/06 17:08

Go言語でGinを用いて、ログイン機能のあるWebサイトを構築しています。そこで、ログインした状態をクッキーで保存してユーザー名を表示したいです

現状

  • localhost:8080にてユーザ名、パスワードを入力し、/loginでログイン処理し、/smotyにリダイレクトしています

/loginでクッキーを生成してc.Redirect(302, "/smoty")/smotyにクッキーを渡したいんですけどやり方がわかりません
ほかにやり方があるのか、そもそもログイン処理のやり方に欠陥があるのか、教えてもらえると幸いです

go

1// main.go 2 3package main 4 5import ( 6 "fmt" 7 "net/http" 8 9 "github.com/gin-gonic/gin" 10) 11 12func main() { 13 r := gin.Default() 14 r.LoadHTMLGlob("templates/*.html") 15 r.Static("/assets", "./assets") 16 17 dbInit() 18 19 r.GET("/", func(c *gin.Context) { 20 c.HTML(http.StatusOK, "login.html", gin.H{}) 21 }) 22 23 r.POST("/signup", func(c *gin.Context) { 24 name := c.PostForm("name") 25 password := c.PostForm("password") 26 dbSignup(name, password) 27 c.HTML(http.StatusOK, "signup.html", gin.H{"name": name, "password": password}) 28 }) 29 30 r.POST("/login", func(c *gin.Context) { 31 name := c.PostForm("name") 32 password := c.PostForm("password") 33 dblogin(name, password) 34 cookie := &http.Cookie{ 35 Name: "username", 36 Value: name, 37 } 38 fmt.Println(cookie) 39 c.Redirect(302, "/smoty") 40 }) 41 42 r.GET("/smoty", func(c *gin.Context) { 43 c.HTML(200, "smoty.html", gin.H{}) 44 }) 45 46 r.Run(":8080") 47} 48

go

1//db.go 2 3package main 4 5import ( 6 "github.com/jinzhu/gorm" 7 _ "github.com/jinzhu/gorm/dialects/mysql" 8) 9 10type Users struct { 11 gorm.Model 12 Name string //頭文字を大文字にしないと、DBにマイグレーションできない 13 Password string 14 Score int 15} 16 17// DB接続 18func dbInit() { 19 db, err := gorm.Open() 20 if err != nil { 21 panic("Init失敗") 22 } 23 db.AutoMigrate(&Users{}) 24 defer db.Close() 25} 26 27//サインアップ 28func dbSignup(name string, password string) { 29 db, err := gorm.Open() 30 if err != nil { 31 panic("Signup失敗") 32 } 33 db.Create(&Users{Name: name, Password: password}) 34 defer db.Close() 35} 36 37//ログイン 38func dblogin(name string, password string) Users { 39 db, err := gorm.Open() 40 if err != nil { 41 panic("login失敗") 42 } 43 var users Users 44 if err := db.Where("name = ? AND password = ?", name, password).First(&users).Error; err != nil { 45 panic("存在しないアカウント") 46 } 47 db.Close() 48 return users 49} 50 51func dbDelete(id int) Users { 52 db, err := gorm.Open() 53 if err != nil { 54 panic("Delete失敗") 55 } 56 var users Users 57 db.First(&users, id) 58 db.Delete(&users) 59 db.Close() 60 return users 61} 62 63func dbGetOne(id int) Users { 64 db, err := gorm.Open() 65 if err != nil { 66 panic("GetAll失敗") 67 } 68 var users Users 69 db.First(&users, id) 70 db.Close() 71 return users 72} 73

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

https://github.com/gin-gonic/gin#set-and-get-a-cookie が参考になるかと思います。

go

1package main 2 3import ( 4 "fmt" 5 "net/http" 6 7 "github.com/gin-gonic/gin" 8) 9 10func main() { 11 12 router := gin.Default() 13 14 router.GET("/set_cookie", func(c *gin.Context) { 15 // セット 16 c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false, true) 17 18 c.String(http.StatusOK, "Set cookie") 19 }) 20 21 router.GET("/get_cookie", func(c *gin.Context) { 22          // 取得 23 cookie, err := c.Cookie("gin_cookie") 24 25 if err != nil { 26 c.String(http.StatusOK, "Failed to get cookie") 27 return 28 } 29 30 c.String(http.StatusOK, fmt.Sprintf("Cookie value: %s \n", cookie)) 31 }) 32 33 router.Run() 34} 35

投稿2020/09/04 00:06

ducci

総合スコア191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問