web-dev-qa-db-ja.com

Rails 3 with Devise for Authentication-手動でユーザーを作成するにはどうすればよいですか?

メールアドレスの確認を強制せずに、手動で新しいUsersを作成したいと思います。

アイデアは、既存のユーザーが登録を必要とせずに友達を自動的に追加できるようにすることです。私が解決しようとしているビジネスケースにとっては理にかなっています。

Deviseでこれをどのように達成できますか?

34
AnApprentice

skip_confirmation!メソッドは、すべてのconfirmableモデルで使用できます。

@user = User.new params[:user]
@user.skip_confirmation! # Sets confirmed_at to Time.now, activating the account
@user.save

ただし、ユーザーアカウントはアクティブになります。それを望まない場合は、読み続けてください。

Deviseは、条件付きコールバックを使用して確認トークンを生成し、電子メールを送信します。コールバックは、confirmation_required?trueを返した場合にのみ呼び出されます。モデルで再定義します。

def confirmation_required?
  false
end

ただし、これにより、確認が必要かどうかが考慮されるため、active_for_authentication?メソッドは常にtrueを返します。それも再定義する必要があります。

def active_for_authentication?
  confirmed? || confirmation_period_valid?
end

このように、アカウントは非アクティブのままになり、確認メールは送信されません。レコードでconfirm!を呼び出すか、confirmed_atを任意の日付に設定して、ユーザーを手動でアクティブ化する必要があります。

それはかなりのハックですが、うまくいくはずです。

参考: confirmable.rb

50
Matheus Moreira

Devise 2.2以降、モデル内のメソッドを再定義せずに、基本的にMatheusの投稿からすべてを実行するskip_confirmation_notification!メソッドも利用できるようになったことを将来の参考のために追加したいと思います。

9
UnSandpiper