0

私はhttps://github.com/plataformatec/devise/wiki/How-To:-Override-confirmations-so-users-can-pick-their-own-passwords-as-part-of-confirmationに従おうとしています-アプリのユーザーがサインアップ時に電子メール アドレスのみを提供できるようにするためのアクティベーション。電子メールを確認した後、残りの情報を入力するよう求められますしかし、アプローチが少し壊れているように見えるか、完全には理解していません。

説明では、confirmations_controller に次のメソッドがあります。

  def with_unconfirmed_confirmable
    original_token = params[:confirmation_token]
    confirmation_token = Devise.token_generator.digest(User, :confirmation_token, original_token)
    @confirmable = User.find_or_initialize_with_error_by(:confirmation_token, confirmation_token)
    if !@confirmable.new_record?
      @confirmable.only_if_unconfirmed {yield}
    end
  end

そのままにしておくと、常に「確認トークンが無効です」というエラーが表示されます。新しいトークンが生成され、見つからないことが原因のようです。ログで私が何を意味するかを見ることができます:

Started GET "/users/confirmation?confirmation_token=9835abdff3d03d0a29e1c5a640c6a22f1ed6289b4cf696ed514ba183aad49caa" for 127.0.0.1 at 2013-11-12 07:39:42 -0700
Processing by ConfirmationsController#show as HTML
  Parameters: {"confirmation_token"=>"9835abdff3d03d0a29e1c5a640c6a22f1ed6289b4cf696ed514ba183aad49caa"}
  ESC[1mESC[36mUser Load (0.3ms)ESC[0m  ESC[1mSELECT "users".* FROM "users" WHERE "users"."confirmation_token" = '98e17d2ea3cc3fcba5cab7d37bd9a865fc2e318372cb293b541b8a05b46f
e4a3' LIMIT 1ESC[0m

しかし、生成された Confirmation_token の代わりに original_token を使用するようにメソッドを変更すると、すべて機能します。私は何が欠けていますか?派生トークンを使用しないことについて心配する必要がありますか?

4

1 に答える 1