💫

Rails deviseについて

2023/04/14に公開

deviseとは

railsで作ったwebアプリケーションに簡単に認証機能を実装できるgemのこと!

devise が管理されている GitHub のリポジトリ
https://github.com/heartcombo/devise
「どのように動くか」を理解するより「どう使うか」を理解していくことが大切。
🇯🇵
https://qiita.com/gakkie/items/6ef70c0788c3cbff81ee

(このように誰でも閲覧でき、無償で利用できるプロジェクトのことを 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