2013-11-12 3 views
0

Я пытаюсь следовать https://github.com/plataformatec/devise/wiki/How-To:-Override-confirmations-so-users-can-pick-their-own-passwords-as-part-of-confirmation-activation, чтобы пользователи моего приложения могли отправлять только адрес электронной почты при их регистрации, а затем запрашивать оставшуюся часть информации после того, как они подтвердите свою электронную почту. Но подход кажется слегка сломанным, или я не совсем понимаю его.Rails 3.2 ошибка переопределения для регистрации только по электронной почте

В инструкции, в 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 [email protected]_record? 
     @confirmable.only_if_unconfirmed {yield} 
    end 
    end 

Если я оставлю как есть, я всегда получаю «Подтверждение Токен недействителен» ошибка. По-видимому, это связано с тем, что новый токен генерируется и не найден. Вы можете увидеть, что я имею в виду в журнале:

Started GET "https://stackoverflow.com/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 вместо сгенерированной confirmation_token, все это работает. Что мне не хватает? Должен ли я беспокоиться о том, чтобы не использовать полученный токен?

ответ

0

Оказывается, ошибка была из-за того, что мое приложение находилось на более старой версии устройства, которое непреднамеренно обновилось, чтобы разработать 3.1. Благодаря этому сообщению: Upgrading to devise 3.1 => getting Reset password token is invalid

Я обновил почтовую программу, чтобы отправить правильный токен, и теперь все работает.