ユーザのsigninの際に、既に同じユーザ名の登録があれば、登録できないようにしたい。
mysql側ではnameにUnique keyをつけている
mysql> describe users;
+———-+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———-+————–+——+—–+———+—————-+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | UNI | NULL | |
| email | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
| filepath | varchar(255) | YES | | NULL | |
| message | text | YES | | NULL | |
+———-+————–+——+—–+———+—————-+
6 rows in set (0.01 sec)
これだと、実際に同じnameで入力があった場合、mysql側にはinsertされないが、
ページがそのまま遷移してしまう。
そのため、同じnameの入力があった場合は、入力画面に戻るようにしたい
revelでc.Validation.${} でunique判定が見当たらないので、
実際にselectして、処理する
result := []models.Users{} DB.Where("name = ?", name).First(&result) if len(result) != 0 { c.Flash.Error("Same username is registered!") c.Validation.Keep() c.FlashParams() return c.Redirect(App.Signin) } hashPassword := getMD5Hash(password) DB.Create(&models.Users{ Name: name, Email: email, Password: hashPassword, }) return c.Render()
これ2時間ぐらいかかった…
go revelとか、documentなさすぎやろ😖😖😖😖