0

私は Devise を使用しており、ホワイト リストに含まれる電子メールのみが実際にサインアップできるという要件を構築しようとしています。

Over Time メールはそのリストに追加されます。つまり、今日は 10 件の電子メールがあり、明日はさらに 20 件以上のメールがあります。

しかし、これを達成する方法はまだよくわかりません。

私はしなければならないことを知っていますCreate my own Registrations Controller、そして検証のために私はこれに似たものが必要だと思います:

before_validation :whitelisted?

def whitelisted?
  unless WhiteList.exists?(:email => email)
    errors.add :email, "is not on our beta list"  
  end
end 

ただし、これを開始または継続する方法についてはわかりません。それがベストプラクティスかどうかさえわかりません。

そのホワイトリストにメールを追加するにはどうすればよいですか? また、そのホワイトリストはどこにありますか?

誰かが私にこれを説明するのに十分初心者に優しいことができれば.

4

2 に答える 2

2

以下を試してみてください。これが役立つと思います。

新しい登録コントローラーを作成する

class RegistrationsController < Devise::RegistrationsController

  def create
    unless WhiteList.exists?(:email => params[:user][:email])
      errors.add :email, "is not on our beta list"
    else
      super  
    end
  end
end

そしてルートファイルで既存のものを次のものに置き換えます

devise_for :users, controllers: { registrations: "registrations" }

以下を使用して新しいモデルのホワイトリストを作成します

rails g model whitelist email:string

コマンドを実行しますrake db:migrate

この後、Rails コンソールを起動し、次のコマンドを使用して電子メールを追加します。

Whitelist.create(email: "test@user.com")
于 2013-10-02T07:35:59.560 に答える
1

@Amit Sharmaの回答は便利だと思いましたが、そのままでは機能しません。これが私が思いついたものです:

class RegistrationsController < Devise::RegistrationsController
  def create
    if WhiteList.exists?(:email => params[:user][:email].downcase)
      super
    else
      flash[:error] = "Your email is not on our beta list."
      redirect_to new_user_registration_path
    end
  end
end

class WhiteList < ActiveRecord::Base
  before_save :downcase_email
  validates :email, presence: true

  def downcase_email
    self.email = email.downcase
  end
end

これにより、電子メールをホワイトリストに登録する際の大文字と小文字の区別が解決され、ホワイトリストに登録された電子メールが一致しない場合にフラッシュ エラー メッセージが生成されます。

于 2015-11-04T13:54:07.123 に答える