Rails deviseについて
deviseとは
railsで作ったwebアプリケーションに簡単に認証機能を実装できるgemのこと!
devise が管理されている GitHub のリポジトリ
🇯🇵
(このように誰でも閲覧でき、無償で利用できるプロジェクトのことを OSS(オープンソースソフトウェア)という)
devise のインストール
devise の場合は Gem をインストールした後に、改めてインストールの手順が必要なので注意
devise の設定ファイルの作成
rails g devise:install
devise の基本操作
deviseで認証するためのモデルを作成
(他のモデルを使用したい時はそのモデル名でOK!)
rails g devise User
これで、「User」という名のモデルと、users テーブル用のマイグレーションファイルが作成された!
- User モデル(ユーザ情報を操作する)
- users テーブルのマイグレーションファイル(ユーザ情報を保存する)
app/models フォルダの user.rb ファイルも自動作成され、User モデルが定義されている!
- :database_authenticatable(パスワードの正確性を検証)
- :registerable(ユーザ登録や編集、削除)
- :recoverable(パスワードをリセット)
- :rememberable(ログイン情報を保存)
- :validatable(email のフォーマットなどのバリデーション)
「作成した User モデルに devise で使用する機能が記述されている」ことを覚えておくこと。
作成された devise のユーザーテーブルを確認
作成された migration ファイルを確認
(db/migrate フォルダ内にある(年月日時分秒)_devise_create_users.rbファイル)
devise のユーザーテーブルをカスタマイズする
デフォルトでは名前がないため、ユーザ登録の際に名前が必要なように作りたければ
カラムを追加しておく!
##名前を保存するカラム
t.string :name
データベースへマイグレーションを行う
rails db:migrate
Routing
config フォルダの routes.rb ファイルには、ルーティングが自動的に追加されている!
Rails.application.routes.draw do
devise_for :users
end
devise_for :users は、devise を使用する際に URL として users を含むことを示している。
どのようなルーティングになるのか、rails routes を実行して確認!
今日学んだこと
deviseの機能
userコントローラーにもcreateアクションが必要だと思っていたが、
deviseでログイン、ログアウト、パスワードのリセット、ユーザー登録などの機能を実装しているため必要ないということ!
課題3作成途中でいきなりサインアップができなくなってしまった原因
user.rbファイルで
正しいコード
validates :name, length: { minimum: 2, maximum: 20 }, presence: true, uniqueness: true
validates :introduction, length: { maximum: 50 }
introductionの方にもpresence: true入力必須としてしまっており、
サインアップ時にintroductionの枠がないのにも関わらずエラーになってしまっていた!
枠がなくてもだめなんだね〜〜
エラー文が出ず、画面推移しないだけだったから、メンターさんとめちゃくちゃ時間使ってしまったけど、面白いメンターさんで色々と救われた😂
Cloud9のバグ
あと、何でこんなん気づかないんって感じだけど、
Cloud9で確実に保存ボタン押したのに、反映されてないことがあって
再起動したらできたみたいなミスが本当に悔しかった、、
そりゃメンターさんと迷宮入りになるわなって感じで、一旦固まってしまった後とかは
怪しいから再起動した方が良さそうということを学んだ。
Rspecファイル
またなんでこんなミスするんって感じだけど
課題2でダウンロードしていたRspecファイルを間違って課題3の方にドロップしていて
エラーの理解が全くできない状態が発生していた、、😂
でも本当に理解できなさすぎて落ち込んでいたから、ファイルのミスで安心した、、!
とりあえず課題3なんとか完成できたから、明日から応用進めつつ
課題3みたいなんもう一個作れたらなと!
Rspecテストが全て緑になった時の達成感を味わいつつ
今日はおやすみなさい!
Discussion