Two factor authentication extension for Devise
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Matt Mueller b4e8138b5a Only max_login_attempts is now configurable. 11 years ago
app Merge pull request #9 from johnmichaelbradley/master 12 years ago
config/locales Typo and punctuation corrections. 12 years ago
lib Only max_login_attempts is now configurable. 11 years ago
spec Test otp authentication. 11 years ago
.gitignore Updating gitignore 11 years ago
Gemfile first commit 13 years ago
LICENSE first commit 13 years ago
README.md Update README.md 11 years ago
Rakefile first commit 13 years ago
two_factor_authentication.gemspec Adding rspec. 11 years ago

README.md

Two factor authentication for Devise

Features

  • control sms code pattern
  • configure max login attempts
  • per user level control if he really need two factor authentication
  • your own sms logic

Configuration

Initial Setup

In a Rails environment, require the gem in your Gemfile:

gem 'two_factor_authentication'

Once that's done, run:

bundle install

Automatic installation

In order to add two factor authorisation to a model, run the command:

bundle exec rails g two_factor_authentication MODEL

Where MODEL is your model name (e.g. User or Admin). This generator will add :two_factor_authenticatable to your model and create a migration in db/migrate/, which will add ::second_factor_pass_code and :second_factor_attempts_count to your table. Finally, run the migration with:

bundle exec rake db:migrate

Manual installation

To manually enable two factor authentication for the User model, you should add two_factor_authentication to your devise line, like:

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :two_factor_authenticatable

Two default parameters

  config.devise.login_code_random_pattern = /\w+/
  config.devise.max_login_attempts = 3

Possible random patterns

/\d{5}/
/\w{4,8}/

see more https://github.com/benburkert/randexp

Customisation

By default second factor authentication enabled for each user, you can change it with this method in your User model:

  def need_two_factor_authentication?(request)
    request.ip != '127.0.0.1'
  end

this will disable two factor authentication for local users

Your send sms logic should be in this method in your User model:

  def send_two_factor_authentication_code(code)
    puts code
  end

This example just puts the code in the logs.

External dependencies

Randexp requires words files (Check if it is installed in /usr/share/dict/words or /usr/dict/words), you might need install it:

apt-get install wbritish # or whichever you require