この記事は 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を実行)で以下のようにページが見れるはずです。
registerを押下
ここで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:"-"`
}
ここまでやればフォームが下のようになり、ユーザの作成時に権限を選択することができます。
あとはこんな風に書いてあげれば良いだけですね。
<%= if (current_user.AdminFlag) { %>
管理者の処理
<% }%>
試しにユーザを作成するとちゃんとフラグにboolの値が入っていますね。
ではでは、go buffaloでログインするまででした。
明日はsyumaiさんの記事にになります。