2013-09-13 2 views
0

Я добавил пользовательский метод к моему (DEViSE) контроллера пользователя:Devise .skip_confirmation! не спасает

def confirm 
    @user = User.find(params[:id]) 
    @user.skip_confirmation! 

    respond_to 
     if @user.save 
      //display success message 
     else 
      // display error message 
     end 
    end 
end 

При попытке подтверждения пользователя через это, сохранить не удается, и у меня есть две ошибки в @ user.errors: пароль и password_confirm

Даже в консоли рельсов, если я пытаюсь

@user.skip_confirmation! 
@save 

я получаю откат и сохранить не удается.

Любые идеи будут оценены ..

Дополнительная информация

Проблема причиной этого является

validates_presence_of :password, :password_confirmation 

в моей модели пользователя. Даже если пароль и подтверждение пароля были введены пользователем при регистрации, те получают хэширование вместе, чтобы сделать encrypted_password. Например, когда я нахожу пользователя в консоли, пользователь имеет зашифрованное_память, но не пароль или пароль_подтверждение.

Я попытался это

validates_presence_of :password, :password_confirmation, :on => :create 

Однако это не заставить пользователя ввести и пароль и подтвердить на экране Изменение пароля.

Любая идея о том, как обойти это?

+0

Почему у вас есть чек в блоке reply_to? Я не думаю, что ты хочешь это сделать. –

ответ

0

Я думаю, вы недоразумение, что skip_confirmation! делает.

Модуль Devision's confirmable отправит новому пользователю электронное письмо со ссылкой на ваше приложение. Пока они не нажмут на эту ссылку, они будут «неподтвержденными» и не смогут войти. То, что skip_confirmation! делает, пропускает этот рабочий процесс - пользователь будет немедленно подтвержден и может войти в систему, не получив сначала подтверждение по электронной почте течь.

Вы получаете ошибку, которую вы получаете из-за валидации в пользовательской модели. В частности, пользователь, которого вы пытаетесь сохранить, похоже, не имеет существующего пароля, поэтому ему требуется password и соответствующий атрибут password_confirmation.

Я подозреваю, что есть лучший способ достичь любой цели. Почему нормальный рабочий процесс подтверждения недостаточен? Какое это дополнительное действие контроллера пытается выполнить?

+0

Пользовательский контроллер - это то, что я могу дать системным администраторам возможность (административно) подтвердить пользователя из пользовательского интерфейса администратора, который я создал. –

0

Я думаю, skip_confirmation! на самом деле экономит.

То, что вы хотите, чтобы проверить это, вероятно, if @user.persisted?

+0

Это неверно, все 'skip_confirmation!' Does is 'self.confirmed_at = Time.now.utc' – gregates

+0

Он также удаляет токен подтверждения. –

+0

и @gregates верны, они не сохраняются. –

Смежные вопросы