1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsでURLのidのハッシュ化のやり方完全入門(初心者向け)

Last updated at Posted at 2024-11-07

ハッシュ化とは

ハッシュ化とは,ハッシュ化したい文字や数字をハッシュ関数という関数にかけるとハッシュ化された値がかえってくる.そのハッシュ化された値からは元の値を求めることはできないというものである.

ハッシュ化するメリット

ハッシュ化された値からもとの値を求めることはできないため
セキュリティ対策に効果がある.URLのidはハッシュ化するべきであり,
できていないととても危険!!!

やり方

①まずhashidsというパッケージをインストールする.

Gemfileにパッケージを記述する.

gem 'hashids'

上のコードをGemfileに書いく.
次にターミナルでhashidsをインストールする.

bundle install

これでhashidsのインストールは完了である.

② ハッシュidの初期化

初期化をすることでセキュリティが向上する.
application_controller.rbにハッシュidを初期化するコードを書く.
"your_salt"には好きな文字列を入れる.これはソルトであり,ソルトとはハッシュ化されたidに追加する文字列であり,追加することによりセキュリティ対策が向上する.後ろにハッシュ化した文字列の文字数を指定できる.今回は20文字にしている.

class ApplicationController < ActionController::Base
  before_action :initialize_hashids

  private

  def initialize_hashids
    @hashids = Hashids.new("your_salt",20)
  end
end

③最後にURLのidをハッシュ化する

routes.rbでidをハッシュ化する
params: :idをつけることでidをハッシュ化することができる.

resources :users, param: :id do

このようにハッシュ化する

④ハッシュ化したidからもとのidに戻すには

_controller.rbでハッシュ化したidから元のidを求めるにはdecodeすることで求められる.

やり方
@hashids.decode関数の中にIDを入れて求める.
配列でかえってくるため,firstを用いて初めの値だけを受け取る.
@hashids.decode(prams[:ID]).first

def show
    item_id = @hashids.decode(params[:id]).first
    @item = Item.find_by(id: item_id)
end

⑤ViewsやControllerでidをハッシュ化する

やり方
@hashids.encode関数の中にIDを入れて求める.
@hashids.encode(ID)と書いてIDをencodeでハッシュ化する


Viewsの例

<%= link_to(item.title, item_path(@hashids.encode(item.id))) %>

Controllerの例

redirect_to("/items/#{@hashids.encode(item_requested.id)}")
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?