2011-09-19 1 views
54

Я интегрировал устройство с facebook. Теперь, когда я создать учетную запись пользователя после того, как пользователь вошел в систему с его/ее facebook счета,Devise - создать учетную запись пользователя с подтверждением без отправки по электронной почте?

user = User.create(:email => data["email"], 
        :password => Devise.friendly_token[0,20]) 
    user.confirmed_at = DateTime.now 
    user.save! 

даже если учетная запись была подтверждена, по электронной почте подтверждение по-прежнему увольняют. Любая идея, как я могу отключить электронную почту?

+1

Вывести ': подтверждение' из списка модулей, переданных для разработки в пользовательском классе? Так как вы на самом деле не используете его. – numbers1311407

+1

ну, но другие пользователи, которые регистрируются на моем сайте, должны быть подтверждены по электронной почте – disappearedng

+5

Я думаю, @disappeardng просит исключить случай. – user482594

ответ

125

Подтверждение обратного вызова происходит после создания, поэтому это происходит в строке 1 вашего примера, прежде чем вы установите confirmed_at вручную.

В соответствии с комментариями наиболее правильной задачей было бы использовать метод, предусмотренный для этой цели, #skip_confirmation!. Установка confirmed_at будет работать вручную, но она обходит предоставленный API, что, по возможности, следует избегать.

Так, что-то вроде:

user = User.new(user_attrs) 
user.skip_confirmation! 
user.save! 

Оригинальный ответ:

Если вы передаете confirmed_at вместе с вашими create аргументами, почта не должны быть отправлены, как испытание или не учетная запись уже «подтверждена», это посмотреть, установлена ​​ли эта дата.

User.create(
    :email => data['email'], 
    :password => Devise.friendly_token[0,20], 
    :confirmed_at => DateTime.now 
) 

Это, или просто использовать new вместо create строить свою запись пользователя.

+0

fyi Мне пришлось объявить confirm_at как attr_accessible (не знаю, если это потенциальное нарушение безопасности). Кроме этого это работает! – disappearedng

+8

Используйте User.new и user.skip_confirmation! чтобы избежать необходимости подтверждения confirm_at. – waldo

+0

Использование нового не работает, поскольку электронное письмо отправляется при вызове save! Предложение @ waldo на skip_confirmation работает, хотя – Khash

9

Если вы просто хотите, чтобы предотвратить отправку электронной почты, вы можете использовать #skip_confirmation_notification, например, так:

user = User.new(your, args) 
user.skip_confirmation_notification! 
user.save! 

См documentation

Кузова отправку подтверждения/повторное подтверждение уведомления по электронной почте after_create/after_update. В отличие от #skip_confirmation !, запись еще требует подтверждения.

+0

Это сработало для меня! Верхний ответ не сделал. :(Благодаря! :) –

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