LoginSignup
1
0

More than 1 year has passed since last update.

【Golang】Ginを使ってフラッシュメッセージを表示させる

Posted at

はじめに

Ginでフラッシュメッセージを実装する情報があまり見つからなかったため、備忘録として残します。
コードが冗長的だったり、良い書き方ではなかったりするかもしれませんが、ご了承いただければと思います。

フラッシュメッセージ機能の実装

フラッシュメッセージを表示させるために、Cookieに一時的に保存しすぐに削除することでリダイレクトされた時のみ表示するようにしています。

flash/flash.go
package flash

import (
	"github.com/gin-gonic/gin"
)

func SetFlash(c *gin.Context, status string, msg string) {
	c.SetCookie("Status", status, 1, "/", "localhost", true, true)
	c.SetCookie("Msg", msg, 1, "/", "localhost", true, true)
}

Statusにはメッセージの種類(success,danger等)が入り、Statusに応じて、CSSでフラッシュメッセージの背景色や文字色を変えています。
1秒だけCookieに情報を保存することで、フラッシュメッセージを実装しています。

c.SetCookie()については下記の記事がわかりやすかったです。

使い方

server/routers.go

func DefineRoutes(r gin.IRouter) {
	v1 := r.Group("/")
	{
		v1.GET("/", handler.GetStatic())
	}
	{
		v1.GET("/login", handler.GetLogin())
		v1.POST("/login", handler.PostLogin())
	}
}
handler/handler.go

func GetStatic() gin.HandlerFunc {
	return func(c *gin.Context) {
		status, _ := c.Cookie("Status")
		msg, _ := c.Cookie("Msg")
		c.HTML(200, "static/index.html", gin.H{"Title": "トップ","Status": status, "Msg": msg})
	}
}

func GetLogin() gin.HandlerFunc {
	return func(c *gin.Context) {
		c.HTML(200, "session/new.html", gin.H{"Title": "ログイン"})
	}
}

func PostLogin() gin.HandlerFunc {
	return func(c *gin.Context) {
                //ログイン処理

		flash.SetFlash(c, "success", "ログインしました")
		c.Redirect(302, "/")
	}
}

HTMLではフラッシュメッセージがある時のみ、表示するようにしています。

static/index.html
{{if .Msg}}
	<div class="alert">
		<div class="alert__{{.Status}}">
			<p>{{.Msg}}</p>
		</div>
	</div>
{{end}}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0