Я хотел сделать то же самое. Я временно поместил resource.inspect
в представление и увидел, что это был экземпляр User со всеми атрибутами nil
, кроме reset_password_token
. Учитывая это, я получил доступ к соответствующей записи пользователя, используя грубую силу:
User.find_by_reset_password_token(resource.reset_password_token)
Или, чтобы быть более общим:
resource.class.find_by_reset_password_token(resource.reset_password_token)
Вы можете использовать это непосредственно в поле зрения или назначить его переменной экземпляра в контроллере, если вы переопределяете контроллер Devise. Имейте в виду, что он вернет ноль, если токен недействителен. (Кажется, Devise не проверяет действительность токена до тех пор, пока пользователь не отправит форму, поэтому вы можете перейти к этому представлению с недействительным токеном.)
Обновление 03/2014
Начиная с версии 3.1, вам нужно переварить токен перед поиском:
resource.class.find_by_reset_password_token(Devise.token_generator.digest(resource.class, :reset_password_token, resource.reset_password_token))