Check


プログラミングが無料で学べるYouTubeチャンネルを配信中!

RubyやPython、PHPやReactなど様々なプログラミング言語のチュートリアル動画が充実!

チャンネル登録はこちら

Ruby

【Ruby on Rails】簡単なメモアプリの作成|自作ログイン機能をgemのdeviseなしで実装

Ruby on Rails Gemなしで自作ログイン機能の実装

動画で解説を見る



開発環境

  • Ruby:version 3.1.2
  • Ruby on Rails:version 7.0.4
  • Visual Studio Code:version 1.73.0
  • OS:Windows10

Ruby on RailsでGemなしで自作ログイン機能の実装手順

Ruby on Railsのログイン機能は、ユーザーに適したサービスを提供するために様々なWebアプリケーションで実装されています。

Ruby on Railsのログイン機能については、deviseというgemファイル有名ですが、今回はdeviseなしでログイン機能を自作で実装しています。

今回はメモアプリの作成で使用した「ログイン機能」のコードを用いて解説していきます。

ログイン機能のユーザーモデルの作成

まずはログイン機能で使用するユーザーモデルを作成します。

次にユーザーモデルのマイグレーションファイルに必要な「名前、メールアドレス、パスワード」のカラムを追加していきます。

上記の記述が完了したら、以下のコマンドを叩いてマイグレーションファイルを反映させます。

今回はユーザー機能の作成は省略しますため、ダミーデータをコンソールで挿入していきます。

パスワードについては、bcryptというgemファイルを使用して暗号化するのがおすすめですが、今回は省略しています。

また、今回は省略していますが、ユーザー機能を作成するときにはそれぞれのカラムに適したバリデーションをかけていきましょう。

ログイン機能のセッションコントローラーの作成

次にログイン機能で使用するセッションコントローラーを作成します。

ログイン機能のルーティングの作成

次にログイン機能に必要な「ログイン画面の表示、ログイン処理、ログアウト処理」のルーティングを作成していきます。

それぞれnewがログイン画面の表示、createがログイン処理、destroyがログアウト処理のルーティングになります。

ログイン画面のビューの作成

次にログイン画面のビューを作成していきます。

ログインに必要な情報であるEmailとPasswordを入力する画面です。

Webサービスによってはユーザー名とパスワードにしても良いですが、今回はEmailとPasswordでユーザーを判定するように処理をしていきます。

ログイン機能に必要な処理をセッションコントローラーに記述

次にログイン機能に必要な処理をセッションコントローラーに記述していきます。

createアクションでは、入力されたEmailとPassWordでユーザーモデルに保存されたユーザーレコードを探してきています。

もし、ユーザーが存在していたらsessionというメソッドでユーザーIDを発行し、セッションに保存したユーザーIDをクライアントのクッキーへ渡しています。

これにより、セッションで保存したユーザーIDとユーザーのクッキーに保存されたユーザーIDを照合してユーザー認証することができます。

また、EmailとPassWordでDBからユーザーを探せなかった場合、ログインできないようにしています。

destroyアクションではsessionメソッドでユーザーIDをnilとしてクライアントのクッキーへ渡すことにより、ログアウト状態にすることができます。

そのため、作成したlogged_in?というメソッドは、sessionメソッドでユーザーIDが存在していればログイン状態だと判断することができます。

また、それぞれの処理にフラッシュメッセージやエラーメッセージ、ログイン後の遷移先もどのようにするか検討してみてもらえればと思います。

ログイン機能によるアクセス制限をmenoコントローラーに記述

次にログイン機能によるアクセス制限をmenoコントローラーに記述していきます。

current_userメソッドでユーザーがログインしていない状態だった場合、リダイレクトで遷移先をログインページに飛ばす処理をしています。

before_actionでメモコントローラーが呼び出された場合は必ず実行するようにしておけば、全てのメモコントローラーにアクセス制限をかけるという意味になります。

もし、適用したいアクションを指定したい場合は、exceptやonlyで指定しましょう。

ヘッダーにログインとログアウトボタンを作成

次にヘッダーにログインとログアウトボタンを作成します。

もし、ユーザーがログインしていればログアウトボタンを表示、ログアウトしていればログインボタンを表示するという条件分岐になります。

@userにはログインユーザーの情報が代入されているため、もしログインしていればログインユーザーのみユーザー名を表示することで、ログイン状態かわかりやすいようにすることもできます。

ヘッダーのメニューボタンのデザインを調整

最後にヘッダーのメニューボタンのデザインを調整します。

今回はヘッダーにflexでbetweenを適用することにより、左右に展開することができます。

上記のコーディングは簡易的なデザインなので、好みでデザインを調整してもらえればと思います。

おわりに

Ruby on Railsで自作ログイン機能の実装について解説してきましたが、いかがだったでしょうか。

最初はログイン機能を自作で実装するのはとても難しく感じるかもしれませんが、自作ログイン機能が実装できれば基本的なクッキーとセッションの理解も深くなっていくかと思います。

是非、ユーザーがWebアプリケーションを使いやすいようにするためにも、ログイン機能の実装にチャレンジにしてみてください。

Check


プログラミングが無料で学べるYouTubeチャンネルを配信中!

RubyやPython、PHPやReactなど様々なプログラミング言語のチュートリアル動画が充実!

チャンネル登録はこちら

-Ruby