Go言語でGinを用いて、ログイン機能のあるWebサイトを構築しています。そこで、ログインした状態をクッキーで保存してユーザー名を表示したいです
現状
localhost:8080
にてユーザ名、パスワードを入力し、/login
でログイン処理し、/smoty
にリダイレクトしています
/login
でクッキーを生成してc.Redirect(302, "/smoty")
で/smoty
にクッキーを渡したいんですけどやり方がわかりません
ほかにやり方があるのか、そもそもログイン処理のやり方に欠陥があるのか、教えてもらえると幸いです
go
// main.go package main import ( "fmt" "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.LoadHTMLGlob("templates/*.html") r.Static("/assets", "./assets") dbInit() r.GET("/", func(c *gin.Context) { c.HTML(http.StatusOK, "login.html", gin.H{}) }) r.POST("/signup", func(c *gin.Context) { name := c.PostForm("name") password := c.PostForm("password") dbSignup(name, password) c.HTML(http.StatusOK, "signup.html", gin.H{"name": name, "password": password}) }) r.POST("/login", func(c *gin.Context) { name := c.PostForm("name") password := c.PostForm("password") dblogin(name, password) cookie := &http.Cookie{ Name: "username", Value: name, } fmt.Println(cookie) c.Redirect(302, "/smoty") }) r.GET("/smoty", func(c *gin.Context) { c.HTML(200, "smoty.html", gin.H{}) }) r.Run(":8080") }
go
//db.go package main import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) type Users struct { gorm.Model Name string //頭文字を大文字にしないと、DBにマイグレーションできない Password string Score int } // DB接続 func dbInit() { db, err := gorm.Open() if err != nil { panic("Init失敗") } db.AutoMigrate(&Users{}) defer db.Close() } //サインアップ func dbSignup(name string, password string) { db, err := gorm.Open() if err != nil { panic("Signup失敗") } db.Create(&Users{Name: name, Password: password}) defer db.Close() } //ログイン func dblogin(name string, password string) Users { db, err := gorm.Open() if err != nil { panic("login失敗") } var users Users if err := db.Where("name = ? AND password = ?", name, password).First(&users).Error; err != nil { panic("存在しないアカウント") } db.Close() return users } func dbDelete(id int) Users { db, err := gorm.Open() if err != nil { panic("Delete失敗") } var users Users db.First(&users, id) db.Delete(&users) db.Close() return users } func dbGetOne(id int) Users { db, err := gorm.Open() if err != nil { panic("GetAll失敗") } var users Users db.First(&users, id) db.Close() return users }
まだ回答がついていません
会員登録して回答してみよう