4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Go4Advent Calendar 2019

Day 9

Go言語、buffaloのログイン処理を作成してみる

Last updated at Posted at 2019-12-08

この記事は Go4 Advent Calendar 2019 の 9 日目の記事です。

8日目の記事はこちら

go buffaloとは

go言語で作られたrailsっぽいフレームワークです。
早くて軽くて開発環境も最初からホットリロード付きで非常に快適に開発を進めることができます。
テストも簡単に書けますよ。

インストール方法などはこちらの記事を参照ください。

ログイン機能を作りたい

さっそくログイン機能を作っていきましょう。

まずはプラグインのインストールです。

buffalo plugins install github.com/gobuffalo/buffalo-auth

初期設定を行います。


## 作成されるファイルを確認
buffalo-auth auth -d

## userモデルとテンプレートを作成
buffalo-auth auth
 
## soda CLIを利用するのでコマンドをインストール
go get github.com/gobuffalo/pop/...
go install github.com/gobuffalo/pop/soda

go get -u -v github.com/gobuffalo/buffalo-pop

## migrationを実行
soda migrate

## 開発環境の立ち上げ
buffalo dev

生成されるファイルは以下の通り

create  models/user.go
create  models/user_test.go
    run  goimports -w actions/actions_test.go actions/app.go actions/home.go actions/home_test.go actions/render.go grifts/db.go grifts/init.go main.go models/models.go models/models_test.go models/user.go models/user_test.go
create  migrations/20180910062057_create_users.up.fizz
create  migrations/20180910062057_create_users.down.fizz
create  actions/auth.go
create  actions/auth_test.go
create  actions/users.go
create  actions/users_test.go
create  models/user_test.go
create  actions/home_test.go
create  templates/auth/new.html
create  templates/index.html
create  templates/users/new.html

ここまでで開発環境(buffalo devを実行)で以下のようにページが見れるはずです。

FireShot Capture 002 - Buffalo - Auth Example - localhost.png

registerを押下

FireShot Capture 003 - Buffalo - Auth Example - localhost.png

ここでhomehandlerによって呼び出されるtemplates/index.plush.htmlに変更が入って以下のようになります。

<div class="auth-center">
  <%= if (current_user) { %>
    <h1><%= current_user.Email %></h1>
    <a href="/signout" data-method="DELETE">Sign Out</a>
  <% } else { %>
    <a href="/signin" class="btn btn-primary">Sign In</a>
    <a href="/users/new" class="btn btn-success">Register</a>
  <% } %>
</div>

railsと同じように currente_user で条件分岐していることがわかりますね。

管理者フラグを追加してみる

せっかくなので管理者フラグを付けてみましょう。
まずはマイグレーションファイルを生成します

soda g fizz  add_admin_flag_to_users

出来上がったファイルを以下のように編集します。

down.fizzファイルの中身

drop_column("users", "admin_flag")

up.fizzファイルの中身

add_column("users", "admin_flag", "boolean",  {"null": true})

soda migrateを実行してDBに反映させます

テンプレートファイルの修正

templates/users/new.plush.htmlのフォームの中に以下を追加します。

<%= f.SelectTag("AdminFlag", {options: {"Normal User": 0, "AdminUser": 1}, value: 0}) %>

モデルファイルの修正

models/user.goを以下のように修正します。

type User struct {
	ID           uuid.UUID  `json:"id" db:"id"`
	CreatedAt    time.Time  `json:"created_at" db:"created_at"`
	UpdatedAt    time.Time  `json:"updated_at" db:"updated_at"`
	Email        string     `json:"email" db:"email"`
	PasswordHash string     `json:"password_hash" db:"password_hash"`
	AdminFlag    nulls.Bool `json:"admin_flag" db:"admin_flag"`

	Password             string `json:"-" db:"-"`
	PasswordConfirmation string `json:"-" db:"-"`
}

ここまでやればフォームが下のようになり、ユーザの作成時に権限を選択することができます。

コメント 2019-12-08 193920.png

あとはこんな風に書いてあげれば良いだけですね。

  <%= if (current_user.AdminFlag) { %>
      管理者の処理
  <% }%>

試しにユーザを作成するとちゃんとフラグにboolの値が入っていますね。
コメント 2019-12-08 193958.png

ではでは、go buffaloでログインするまででした。
明日はsyumaiさんの記事にになります。

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?