ume

rails tutorial 10章 認可について

前書き

記事の対象者⇨rails tutorial(10章)に苦戦している方.
何のための記事か⇨認可について.
記事を書いている人→rails tutorialを学んでいる初学者(プログラミング歴8ヶ月程).

目次

①認可とは.
②認可の実装手順.
③認可を実装してみる.

認可とは

①認可とは、正しいユーザー(ログインしているユーザーだけ)が正しい情報にアクセスできる.
要は「自分のページに誰でもアクセスさせないようにする」 こういうTwitterのようなアプリがあり上の画面は自分自身のアカウントページです。 このページを表示するにはURLの語尾に

amazonaws.com/users/101

users/101と入力すると表示されます このページは私しか操作できないようにするべきです。なぜならば第三者が私のユーザー名の更新やパスワードの更新ができてしまうからです。そこで誰でもamazonaws.com/users/101にはアクセスできないようにする仕組みが「認可」です.

②認可の実装手順

①もしログインしていなかった場合ログインするように促す.
②ログインしているユーザーの中から自分のアカウントを操作できるのは自分だけと制限をかける.

認可の実装してみる.

①ログインを促す.
ログインしているユーザー⇨全ての操作ができる.
ログインしていないユーザー⇨特定の操作しかできない.
ログインしていないユーザーはどんな操作ができないようにするのがいいのか「編集とか削除など」の自分しか操作できないようにするのが好ましい機能に認可をつける.
ここではログインしている人だけが編集できるようにし、ログインしていないユーザーはログインしてから編集操作してくださいというようにログインしている時としていない時で操作できる範囲を分ける. コントローラに before_actionメソッドを追加する.

 before_action :①logged_in_user, ②only: [:edit, :update]
before_action :①メソッド名,②オプション

意味は②オプションの中のメソッド(アクション)が呼び出された時は、先に①のメソッドを呼び出してという意味.
なのでeditアクションやupdateアクションが呼び出された時は先にlogged_in_userのメソッドを呼び出してという意味.
そしてlogged_in_userメソッドをこのように定義する. 補足rubyの記法でメソッド(アクション)を引数で渡すときはシンボルの形で渡す。今回で言うところの:logged_in_userや:editなど

def logged_in_user
      unless logged_in?
        flash[:danger] = "Please log in."
        redirect_to login_url
      end
    end

logged_in_userメソッドの意味は「ログインしていないならログインして」という意味です.

②ログインしようとしているユーザーが本当に正しいユーザーかチェックする.

class UsersController < ApplicationController
  before_action :logged_in_user, only: [:edit, :update]
  before_action :correct_user,   only: [:edit, :update]

①作成したログインを促すbefore_actionのメソッドの下に新しいbefore_actionのメソッドを定義する.
引数の:correct_userメソッドの中で,

 # 正しいユーザーかどうか確認
    def correct_user
      @user = User.find(params[:id])
      redirect_to(root_url) unless @user == current_user
    end

current_userで今ログインしているユーザーとデータベースから引っ張ってきた@userが同じじゃなかったらroot_urlにリダイレクトする、同じだったら別の処理を行う.

補足 current_userはログインしていたら使えるメソッド。 ログインしていない状態だとcurrent_userは使えない.