4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby on Rails】 devise(認証機能)の導入方法

Posted at

はじめに

はじめまして!
プログラミング初心者のかずきです。
現在、プログラミングスクールRUNTEQに通っています。
記事を書くことで、自分自身の理解を深め、学習の軌跡を残すために始めました。

まだまだ初学者ですので、内容に間違いがあることもあるかと思います。その際はぜひ、コメントなどでご指摘いただけますと幸いです!

deviseとは?

deviseとは、認証機能をより簡単に実装することができるRuby on Rails専用のgem(ツール)です。
認証機能とは、インターネットの上のシステムにアクセスする際のユーザー本人であることを確認する仕組みです。

今回はGitHubのdeviseを参考にしてDocker環境でdeviseを導入していきます。

前提条件

Ruby on Rails 7.2.3
Ruby 3.4.8
Docker環境

導入方法

gem deviseインストール

deviseをインストールするコマンドを実行
実行場所:ターミナル

docker compose exec web bundle add devise

*以降、ローカル開発の方は"docker compose exec web"を消してください

これによりdeviseがインストールされ、GemfileとGemfile.lockにdeviseの内容が自動で記述されます。

設定ファイル生成

deviseの設定ファイルを生成するコマンドを実行
実行場所:ターミナル

docker compose exec web rails generate devise:install

これにより以下のファイルが生成されます

  • config/initializers/devise.rb
  • config/locales/devise.en.yml

mailerのデフォルト設定

mailerのデフォルトURLを設定します
実行場所:config/environments/development.rb(すでに記載されているかもしれません)

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

何をしているのでしょうか?

簡単に言うと、
「Railsがメールを送る際に『*ドメイン』と『**ポート』はこれで送ってね」の設定を記述しています

*ドメイン:URLの住所です。Qiitaを例に挙げると「https://qiita.com/」の太文字部分です。hostがドメインになっています。
**ポート:URLの住所の中の部屋番号です。Railsの環境開発では3000がデフォルトになっています。

deviseはログイン・ログアウトの他にパスワードを忘れた時のリセット機能もセットになっています。

パスワードを忘れた場合を想像してください。
"忘れた場合はこちら"のリンクを踏んで自分のメールアドレスを入力してメールを送信しますよね?
これによりアプリ側から自分のメールアドレス宛に送付されます。
メール内容には「このURLを使ってWebアプリに入ってパスワードをリセットしてね」というメールが送られてきます。
その際に同じwebアプリに帰ってくるためのドメインとポートを上記設定で指定しているということです。

上記を設定したら、サーバーを再起動してください。

docker compose restart

モデル周りの生成

モデル周りを作成します。今回はUsersテーブルを作成します。
実行場所:ターミナル

docker compose exec web rails generate devise user

これにより以下のファイルが自動生成されます

  • db/migrate/20xxxxxxxxxxxx_devise_create_users.rb
  • app/models/user.rb
  • test/models/user_test.rb
  • test/fixtures/users.yml
    また、以下のルーティングが自動記述されます。
devise_for :users

マイグレーションファイル実行

マイグレーションファイルに書かれた命令を実行します。
実行場所:ターミナル

docker compose exec web rails db:migrate

これによりデータベースの中に実際のテーブルを作成します。

これで完了です。ブラウザにログイン画面が表示されます。
名称未設定.png

もし表示されなかったら、もう一度サーバーを再起動してみてください。

終わりに

言語化って難しいです。相手にどう伝わるかはコミュニケーションをとる上で大切なことなので少し鍛えられました。
また、一度devise機能実装を行ったのちに忘れないようにと本記事を執筆しましたが、実際にここなんでだろう?と疑問が出てきて良い勉強になりました。
今後も続けていければと思いますのでよろしくお願いいたします。

参考

https://github.com/heartcombo/devise

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?