フレンドリーフォワーディングを実装
みなさんこんにちは、新人の意識高丸です。
昨日も初心者向けRuby勉強会、gaienrbに参加してきました。
(http://www.circleaf.com/events/72)
前回に引き続きチュートリアルをすすめていき、ログイン後のフレンドリーフォワーディングを実装しました。
■チュートリアルURL
http://railstutorial.jp/chapters/updating-showing-and-deleting-users?version=4.0#sec-friendly_forwarding
フレンドリーフォワーディングというのは、ログインが必要なページ(仮にAページとします)に未ログイン状態でアクセスした場合に、ログイン画面に遷移させてログインした後はAページに戻すというものです。
このような機能はどこのサイトでも普通に実装されているものだと思っていたのですが、これをフレンドリーフォワーディングと呼ぶというのは知りませんでした。
実装は、まずセッションヘルパーで以下のような2つのメソッドを定義します。
“`app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end
def store_location
session[:return_to] = request.url
end
end
“`
そして、ユーザのサインイン状態をチェックするために実装したsigned_in_userの中で呼び出します
“`app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :signed_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
.
.
.
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in."
end
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end
end
```
request.urlからリクエストされたuriを取得してセッション変数の中に戻るためのURLを保存しておき、ログイン後にはセッション変数にリダイレクトURLが存在したらそこにリダイレクトするという処理を入れます。
この処理は先ほど定義したSessionsHelperに実装したredirect_back_orメソッドが担っています。
当然、リダイレクトURLがセッション変数に残らないよう、遷移させたあとはセッション変数からリダイレクトURLを削除します。
リダイレクト処理の以下の部分はRubyっぽい書き方だと思いました。
Rubyでは条件分岐の戻り値が「最後に評価した値を返す」ということなのでこのような書き方もできるのだと思いました。
```
redirect_to(session[:return_to] || default)
```
Rubyは短く書くことができる言語なので、改めて手に馴染む言語だと実感しました。
Rubyについて日々勉強している新人エンジニアです。初心者向けRuby勉強会のレポートなどを投稿していきます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境