美文网首页ruby on rails
ruby on rails:将网址修改为加密序号

ruby on rails:将网址修改为加密序号

作者: 稻草人_b788 | 来源:发表于2017-08-29 16:22 被阅读47次

    前言:

    之所以将网址改成秘密的乱码序号,是因为在实际生活中我们不希望别人别人看到一些关键信息。
    典型的比如,购物平台的订单流水号,商家是不希望自己的成交量被对手猜到,因此需要把订单的id改成乱码序号。

    实作步骤:

    1. 在订单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

    1. 在order model中建立生成乱码序号的方法generate_token,
    class Order < ApplicationRecord
    + def generate_token
    + self.token = SecureRandom.uuid
    + end
    
    1. 修改order model,添加before_create,设定乱码序号是在订单order生成前产生
    + before_create :generate_token
    ...略
    
    1. 重导网址
    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)通过这两点,同样可以为其他的资料产生乱码序号,来对网址进行加密

    相关文章

      网友评论

        本文标题:ruby on rails:将网址修改为加密序号

        本文链接:https://www.haomeiwen.com/subject/loaodxtx.html