ginを使って簡単なログイン画面を作ってみる【Go言語】

Ginフレームワーク

使用環境

フレームワーク
・Gin(Webフレームワーク)
・Gorm(DB関連のフレームワーク)

DB
・Postgresql

テーブル定義

CREATE TABLE public.users
(
  id integer NOT NULL DEFAULT nextval('users_id_seq'::regclass),
  created_at timestamp with time zone,
  updated_at timestamp with time zone,
  deleted_at timestamp with time zone,
  user_id text NOT NULL,
  password text,
  regist_date text,
  last_login text,
  CONSTRAINT users_pkey PRIMARY KEY (id, user_id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.users
  OWNER TO "USER";

CREATE INDEX idx_users_deleted_at
  ON public.users
  USING btree
  (deleted_at);

画面関連の処理

・index.go
index.htmlのGet処理とログインボタン押下のPOST処理の実装を行います。

package web
import (
    "github.com/gin-gonic/gin"
	"net/http"
	"github/GoSumple/gin_sumple/go/db"
)

func Index(ctx *gin.Context){
        ctx.HTML(http.StatusOK, "index.html", gin.H{
		"text": "hello",
	})		
}

func Login(ctx *gin.Context){
	logintext:=""
	userid,_:=ctx.GetPostForm("userId")
	password, _:=ctx.GetPostForm("password")

	userinfo:=db.UserSelect(userid,password)

	if userinfo.UserId != "" {
		logintext="ok"
	}else{
		logintext="false"
	}

	ctx.HTML(http.StatusOK, "index.html", gin.H{
		"text": logintext,
		})
	
}

・index.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Gin Application</title>
</head>
<body>
<form method="post" action="/login">
    <h1>Login</h1>
    <input type="text" name="userId"><br>
    <input type="password" name="password">
    <input type="submit" value="ログイン">
    {{.text}}
    </form>
</body>
</html>

画面のPOST、GETを定義する

・router.go

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

func Router(){
	r := gin.Default()
	r.LoadHTMLGlob("content/html/*")
	r.GET("/", Index) // ログイン画面(GET処理)
	r.POST("/login", Login) // ログイン画面(POST処理)
	r.Run(":8080")
}

データベース関連の処理

・dbConnect.go

package db
import (
  "github.com/jinzhu/gorm"
    _ "github.com/lib/pq"
)

func GormConnect() *gorm.DB {
 //接続するDBの情報を定義
  DBMS     := "postgres"
  USER     := "USER"
  PASS     := "password"
  PROTOCOL := "localhost:5432"
  DBNAME   := "GODB"

  CONNECT := DBMS+"://"+USER+":"+PASS+"@"+PROTOCOL+"/"+DBNAME+"?sslmode=disable"
  db,err := gorm.Open(DBMS, CONNECT)

  if err != nil {
    panic(err.Error())
  }
  return db
}

・User.go

package data
import "github.com/jinzhu/gorm"

type User struct {
	gorm.Model
	UserId string `gorm:"primary_key"`
	Password string
	RegistDate string
	LastLogin string
	}

・UserDb.go

package db
import (
	"github/GoSumple/gin_sumple/go/data"
)

//ユーザIdとパスワードをもとにユーザの情報を取得する
func  UserSelect(userId string,password string) data.User{
	d := GormConnect()
	selData := data.User{}
	d.First(&selData,"user_id=? and password = ?",userId,password)
	defer d.Close()
	return selData
}

実際の画面

localhost:8080にアクセスすると下記の画面が表示されます。

ログインに成功すると文字列「hello」の箇所が「ok」に切り替わります。

ログインに失敗すると「false」に切り替わります。