sugulogの日記

Railsのdevise!ユーザー登録機能を実装しよう!!〜前編〜

f:id:sugulog:20201014150458p:plain
こんにちは、すぐるです!

sugulogをお読みいただきありがとうございます!!

このブログは、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準に書いています。

少しでもお役に立てれば幸いです。

 

今回は、Railsのdeviseということで

  • ユーザー登録機能の前編

について簡単に解説します!!

その為このブログを読むことで、deviseについて理解できるのはもちろん、ユーザー登録機能の実装についての理解も深まります。

是非最後までご愛読ください。

 

今回は、

  • deviseの導入

  • user_signed_in?メソッド

  • redirect_toメソッド

の順で解説していきます。

また、前回のブログの内容を引き継いで記述しています。

そのため、前回のブログを必ず1度読んでからお読みください。

sugulog.hatenadiary.jp

では早速、みていきましょう!!

・deviseの導入

deviseとは、ユーザー管理機能を簡単に実装するためのGemのことです。

今回は、このdeviseを使いユーザー管理機能を実装していきます。

では始めにdeviseをアプリケーションに導入するため、Gemfileにgem 'devise'を記述し、bundle installしましょう。

deviseはdevise専用のコマンドで設定ファイルを作成する必要があります。

そのためまずは、rails g devise:installコマンドを実行しましょう。

rails g devise:installは、deviseの設定関連に使用するファイルを自動で生成するコマンドです。

次に、rails g deviseコマンドを実行しましょう。

rails g deviseコマンドは、rails g devise モデル名とすることでモデルとマイグレーションの生成やルーティングなどの設定をまとめて処理します。

今回は、rails g devise userで実行しました。

f:id:sugulog:20201016173351p:plain

devise_forというdeviseのメソッドを使い、ルーティングが自動生成されているのも確認できますね!
因みにdevise_forメソッドとは、ユーザー機能に必要な複数のルーティングを1度に生成してくれるメソッドです。

では最後に、rails db:migrateを行いテーブルを作成しておきましょう。

これでdeivseの導入が完了です!!

・user_signed_in?メソッド

deviseを導入することで使用できるようになるメソッド。ログインしているかどうかの判定を行い、ログインしていればtureを返しログアウト状態であればfalseを返す。

このメソッドを使用することにより、ログインしている時としていない時に合わせてアプリケーションの見た目や動きを変えることができます!

そのため今回はヘッダーで使用し、以下のように記述しました。

f:id:sugulog:20201016181408p:plain

17行目~27行目に注目してください。

if文を使い場合分けしています。

if user_signed_in?とすることでログインしている状態、つまりtureならelseまでの処理が実行されます。

そしてログインしていない状態、つまりfalseならelse以下の処理が実行されます。

処理内容としてはlink_toを使い、ログアウトボタンや投稿するボタン、ログインボタン、新規登録ボタンを作成しています。

その結果ログインしている時にはヘッダーに、ログアウトボタンと投稿するボタンが表示され、ログアウトしている時はヘッダーにログインボタンと新規登録ボタンが表示されるようになります。

f:id:sugulog:20201016184301g:plain

またlink_toを記述する際ですが、deviseを導入したことによりログインやログアウト、新規登録などのルーティングも自動生成されています。

そのためrails routesを行いパスを調べ、link_toのURLに記述しましょう!!

また注意点があり、ログアウトする際はHTTPメソッドとしてdelete(method: :delete)を指定してあげる必要があります。

・redirect_toメソッド

Railsでリダイレクト処理(本来受け取ったパスとは別のパスへ転送する機能)を行う際に使用するメソッド。redirect_to action: :リダイレクト先となるアクション名で実行できる。

コントローラー等で処理が終わった後に対応するビューファイルを参照せずに、別ページに遷移したりなんかができます。 

今回はredirect_toメソッドを使用し、以下のように記述しました。

f:id:sugulog:20201016195651p:plain

 まず注目してもらいたいのが、4行目です。

before_actionを使いコントローラーが実行される前のメソッドを定義しています。

そしてそのメソッドは、44行目〜48行目に記述しています。

まず、unlessというのはifとは逆でfalseの時に処理が実行されます。

そのためunless user_signed_in?と記述することによりfalseの状態、つまりログアウトしている状態の時に実行される処理を記述することができます。

その中でindexにリダイレクトする処理が記述されています。

この結果、ログアウト状態から新規投稿画面へ直接アクセス(URLを入力)されたとしても、indexアクション(投稿一覧ページ)にリダイレクトされるようになりました。

また4行目でexceptとしてshowを指定しているのは、ログアウト状態で詳細ページにアクセスされて、詳細ページを表示しても問題がないからです。

またindexも指定していますがこれは、ログアウト状態でindexにアクセスされた際指定しないと無限ループが続くので、そのループを防ぐためです。

では最後にURLを直接入力した際、リダイレクトされるかだけ実際に確認しておきましょう。

 

以上、今回のブログでした。

deviseについて理解でき、ユーザー登録機能の実装についての理解も深まりましたか??

今回は前編で、次回は後半です。

合わせて読むことでさらに理解が深まりますので、次回も是非お読みください(≧∀≦)/

 

最後に!!

今後も、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準にブログを書いていきます。

少しでも気になった方はお試しでもいいので1度、読者登録お願いします!

またTwitterでもプログラミングに関することを中心に情報を発信してます。

宜しければそちらのフォローもお願いします。

最後までご愛読いただきありがとうございました!!