Я пытался следовать https://github.com/plataformatec/devise/wiki/How-To:-Override-confirmations-so-users-can-pick-their-own-passwords-as-активациячастиподтверждения, чтобы пользователи моего приложения могли указывать только адрес электронной почты при регистрации, а затем запрашивать остальную информацию после подтверждения своей электронной почты. Но подход кажется немного сломанным или я его не совсем понимаю.
В инструкции, в confirms_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 [email protected]_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
Но если я изменю метод, чтобы использовать original_token вместо сгенерированного confirm_token, все заработает. Что мне не хватает? Должен ли я беспокоиться о том, что не использую производный токен?