0

現在、リンク付きの招待メールを送信する招待モデルを構築しています。リンクは sha1 ハッシュで「保護」されています。ただし、コントローラーはハッシュの検証に失敗し、その理由がわかりません...

生成されたリンクは次のようになります

/projects/1/invitations/12?hash=c043b70c359a85e20cd9933c9cd37ef3f8943d7b

コントローラーはそれらを検証しようとします

def show
    @invitation = Invitation.find(params[:id])
    if @invitation.hash.to_s != params[:hash].to_s
       redirect_to root_url
       ....

文字列比較は毎回失敗します。トリプルチェックしましたが、文字列は完全に同一のようです。

編集: いくつかのデバッグ情報

logger.debug params
logger.debug @invitation.hash

development.log に次の出力が出力されます。

{"hash"=>"c043b70c359a85e20cd9933c9cd37ef3f8943d7b", "action"=>"show",
controller"=>"invitations", "project_id"=>"1", "id"=>"12"}
c043b70c359a85e20cd9933c9cd37ef3f8943d7b
4

1 に答える 1

1

@invitation.hashが実際に を呼び出していないかどうかを確認しObject#hashます。

于 2012-05-03T13:09:10.040 に答える