は、私が購入にtoken
列を追加し、作成後にそれを設定します:
require 'secure_random'
class Purchase < ActiveRecord::Base
before_create :regenerate_token
def regenerate_token
self.token = SecureRandom.urlsafe_base64(24)
end
end
することはできその後、あなたのようなセットアップフォローアップする任意の他のネストされたリソース:
resources :purchases do
resources :follow_ups, only: [:new, :create]
end
へユーザーがフィードバックを使用するフォームへのリンクを作成します。
<%= link_to("Tell us what you think", new_purchase_follow_up_url(@purchase, token: @purchase.token)) %>
これは、アクセストークンを含むURLにクエリ文字列パラメータを追加します。アクセストークンは、我々は購入のために保存されたものと一致した場合、我々はチェックし、コントローラに認証するために :
class FollowUpsController < ApplicationConrtroller
before_action :set_purchase!
before_action :check_token!
# ...
private
def set_purchase!
@purchase = Purchase.find(params[:purchase_id])
end
def check_token!
unless params[:access_token] == @purchase.token
redirect_to root_path, error: 'You are not authorized' and return false
end
end
end
を新しいの間でトークンを渡すとアクションを作成するには、隠し入力としてフォームに追加します。
<%= form_for(@follow_up) do |f| %>
<%= hidden_field_tag :access_token, @purchase.token %>
<% end %>
出典
2017-09-21 13:24:01
max
私はRails 4を使用していますが、私はBCrypt Gemと同様のことを達成しました。 – michael
BCryptは完全に過剰です。これは、比較的高い計算コストでパスワードを暗号化するためのものです。 Ruby stdlib [SecureRandom](https://ruby-doc.org/stdlib-2.1.2/libdoc/securerandom/rdoc/SecureRandom.html)を使用してください。 'has_secure_token'は' SecureRandom.base58(24) 'を使います。衝突の可能性はほとんどありません。 – max