ruby on rails:URLを暗号化シーケンス番号に変更

1757 ワード

前言:
ウェブサイトを秘密の乱番号に変えたのは、実際の生活の中で私たちが他の人に重要な情報を見たくないからだ.典型的には、ショッピングプラットフォームの注文フロー番号は、業者が自分の成約量を相手に当てられたくないため、注文のidを文字化け番号に変更する必要があります.
実作手順:
  • 受注order modelに新しい欄位tokenを追加し、受注乱符号化シーケンス番号端末の実行を格納します.rails g migration add_token_to_order新しく生成されたmigrationファイルに、次のコードを追加します.
  • class AddTokenToOrder < ActiveRecord::Migration[5.0]
      def change
    +    add_column :orders, :token, :string
      end
    end
    

    そしてrails g migrateを実行する
  • order modelで乱符号化シーケンス番号を生成する方法generate_を確立するtoken,
  • class Order < ApplicationRecord
    + def generate_token
    + self.token = SecureRandom.uuid
    + end
    
  • order modelを変更し、before_を追加create,文字化けシーケンス番号設定は注文order生成前に
  • を生成する.
    + before_create :generate_token
    ... 
    
  • 再導URL
  • class OrdersController < ApplicationController
    before_action :authenticate_user!,only: [:create]  #              
    
     def create
       @order = Order.new(order_params) #  order  
       @order.user = current_user #order           
       if @order.save
       -  redirect_to order_path(@order)
      +    redirect_to order_path(@order.token) #            order  
       else
         render 'carts/checkout'
       end
    end
    
    def show
    -  @order = Order.find(params[:id])
     +  @order = Order.find_by_token(params[:id]) #    id       order
    end
    
    private
    
    def order_params
      params.require(:order).permit(:billing_name,:billing_address,:shipping_name,:shipping_address)
    end
    end
    

    まとめ:
    (1)before_createはRails model内に構築されたコールバックメソッドで,資料を生成する前に何らかの動作を実行させることを目的としている.この例では、注文orderを生成する前に、先生は文字化けシーケンス番号(2)SecureRandomにします.uuidはRubyに内蔵されたランダムジェネレータであり,本例では注文orderに乱符号化シーケンス番号を生成する方法である(3)この2点により,同様に他の資料に乱符号化シーケンス番号を生成し,ウェブサイトを暗号化することができる.