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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。