đď¸ nondisposable
- Block disposable email addresses from signing up to your Rails app
nondisposable
is a Ruby gem that prevents users from signing up to your Rails app with disposable email addresses.
Simply add to your User model:
ruby
validates :email, nondisposable: true
Thatâs it! Youâre done.
The gem also provides a job you can run daily to keep your disposable domain list up to date.
Installation
Add this line to your applicationâs Gemfile:
ruby
gem 'nondisposable'
And then execute:
bash
bundle install
After installing the gem, run the installation generator:
bash
rails generate nondisposable:install
This will create the necessary migration file, initializer, and a job for scheduled updates. Run the migration:
bash
rails db:migrate
Finally, populate the initial list of disposable domains:
ruby
Nondisposable::DomainListUpdater.update
Usage
To use nondisposable
in your models, simply add the validation:
ruby
class User < ApplicationRecord
validates :email, nondisposable: true
end
You can customize the error message:
ruby
class User < ApplicationRecord
validates :email, nondisposable: { message: "is a disposable email address, please use a permanent email address." }
end
The validation works seamlessly with other Rails validations:
ruby
class User < ApplicationRecord
validates :email,
presence: true,
format: { with: URI::MailTo::EMAIL_REGEXP },
nondisposable: true
end
If youâre validating a different attribute name:
ruby
class User < ApplicationRecord
validates :backup_email, nondisposable: true
end
Configuration
You can customize the gemâs behavior by creating an initializer:
```ruby # config/initializers/nondisposable.rb
Nondisposable.configure do |config| config.error_message = âprovider is not allowed. Please use a non-disposable email address.â config.additional_domains = [âcustom-disposable-domain.comâ] config.excluded_domains = [âfalse-positive-domain.comâ] end ```
Direct Check
You can also check if an email is disposable directly:
ruby
Nondisposable.disposable?('[email protected]') # => false
Nondisposable.disposable?('[email protected]') # => true
Updating disposable domains
To manually update the list of disposable domains, run:
ruby
Nondisposable::DomainListUpdater.update
Itâs important you keep your disposable domain list up to date. nondisposable
will read from the latest version of the disposable-email-domains
list, which is typically updated every few days.
For this, nondisposable
provides you with an Active Job (DisposableEmailDomainListUpdateJob
) that you can use to schedule daily updates. How you do that, exactly, depends on the queueing system youâre using.
If youâre using solid_queue
(the Rails 8 default), you can easily add it to your schedule in the config/recurring.yml
file like this:
yaml
production:
refresh_disposable_domains:
class: DisposableEmailDomainListUpdateJob
queue: default
schedule: every day at 3am US/Pacific
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/rameerez/nondisposable. Our code of conduct is: just be nice and make your mom proud of what you do and post online.
License
The gem is available as open source under the terms of the MIT License.