LoginSignup
0
0

More than 3 years have passed since last update.

URLの直打ち変更防止

Last updated at Posted at 2021-05-18

そのままURLに直接打ち込む場合に他のログイン画面等へ遷移できてしまう。そういった直打ちという問題点を防止する必要がある。

今回はその直打ちの防止方法を記録する。

https://…….amazonaws.com/blogs/2/edit

上記のように2/editとURLへ記載する場合に、別のログインユーザーなどのアカウントへ行けてしまう。

実施方法

(1)対象のコントローラーのストロングパラメータ内にどういった処理をするのかを記載する。
(2)関連するcontrollerにbefore_actionを設定する。

具体例

(1)対象のコントローラーのストロングパラメータ内にどういった処理をするのかを記載する。
図2.png

books_controller.rb
 def ensure_correct_user
    @book = Book.find_by(id: params[:id])
    if @book.user_id != current_user.id
    redirect_to books_path
    end
  end

上記のメソッドを対象のコントローラーに記載をする。その際注意点として、ストロングパラメータ内に記載する。

①def ensure_correct_user
 定義文def_endを用いてメソッドを作る

@book = Book.find_by(id: params[:id])
 ブックのidを見つけてくる

③if @book.user_id != current_user.id
 ifを用いて現在のログインしているユーザーと作成されたデータの持ち主の照合を行う。

④redirect_to books_path
正しいユーザーじゃないとトップページにリダイレクトされる。

(2)関連するcontrollerにbefore_actionを設定する。
図1.png

books_controller.rb
 before_action :ensure_correct_user, only: [:edit, :update]

※before_actionメソッドは、このコントローラが動作する前に実行されます。
今回の場合、app/controllers/books_controller.rbファイルに記述したので、最初にbefore_actionメソッドが実行されます。

上記の記載では、[:edit, :update]のみログイン状態に関わらず、アクセス可能とするためのアクションを指定しています。このcorrect_userメソッドを上記のように設定すると、URL直打ちで対象ページに遷移しようとするとき、(ここではedit,updateアクション)正しいユーザーじゃないとトップページにリダイレクトされる。

またアクションが設定されていない場合の、ログイン認証が済んでいる場合には全てのページにアクセスすることができます。

※authenticate_userメソッドは、devise側が用意しているメソッドです。
:authenticate_user!とすることによって、「ログイン認証されていなければ、ログイン画面へリダイレクトする」機能を実装できます。

0
0
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
0
0