README.md in devise_zxcvbn-4.4.1 vs README.md in devise_zxcvbn-5.0.0

- old
+ new

@@ -1,8 +1,8 @@ # devise_zxcvbn -[![Gem Version](https://badge.fury.io/rb/devise_zxcvbn.png)](http://badge.fury.io/rb/devise_zxcvbn) +[![Gem Version](https://badge.fury.io/rb/devise_zxcvbn.svg)](http://badge.fury.io/rb/devise_zxcvbn) [![Circle CI](https://circleci.com/gh/bitzesty/devise_zxcvbn.svg?style=svg)](https://circleci.com/gh/bitzesty/devise_zxcvbn) [![Code Climate](https://codeclimate.com/github/bitzesty/devise_zxcvbn/badges/gpa.svg)](https://codeclimate.com/github/bitzesty/devise_zxcvbn) Plugin for [devise](https://github.com/plataformatec/devise) to reject weak passwords, using [zxcvbn-js](https://github.com/bitzesty/zxcvbn-js) which is a ruby port of [zxcvbn: realistic password strength estimation](https://tech.dropbox.com/2012/04/zxcvbn-realistic-password-strength-estimation/). @@ -12,52 +12,89 @@ ## Installation Add this line to your application's Gemfile: - gem 'devise_zxcvbn' +```ruby +gem 'devise_zxcvbn' +``` - ## Configuration - class User < ActiveRecord::Base - devise :zxcvbnable +```ruby +class User < ActiveRecord::Base + devise :zxcvbnable - # Optionally add more weak words to check against: - def weak_words - ['mysitename', self.name, self.username] - end - end + # Optionally add more weak words to check against: + def weak_words + ['mysitename', self.name, self.username] + end +end +``` +## Available methods for devise resources + +```ruby +class User < ApplicationRecord + devise :zxcvbnable +end + +user = User.new.tap do |user| + user.email = "example@example.com" + user.password = "123456789" +end + +user.password_score => #<OpenStruct password="123456789", guesses=6, guesses_log10=0.7781512503836435, sequence=[{"pattern"=>"dictionary", "i"=>0, "j"=>8, "token"=>"123456789", "matched_word"=>"123456789", "rank"=>5, "dictionary_name"=>"passwords", "reversed"=>false, "l33t"=>false, "base_guesses"=>5, "uppercase_variations"=>1, "l33t_variations"=>1, "guesses"=>5, "guesses_log10"=>0.6989700043360187}], calc_time=15, crack_times_seconds={"online_throttling_100_per_hour"=>216, "online_no_throttling_10_per_second"=>0.6, "offline_slow_hashing_1e4_per_second"=>0.0006, "offline_fast_hashing_1e10_per_second"=>6.0e-10}, crack_times_display={"online_throttling_100_per_hour"=>"4 minutes", "online_no_throttling_10_per_second"=>"less than a second", "offline_slow_hashing_1e4_per_second"=>"less than a second", "offline_fast_hashing_1e10_per_second"=>"less than a second"}, score=0, feedback={"warning"=>"This is a top-10 common password", "suggestions"=>["Add another word or two. Uncommon words are better."]}> +# returns a simple OpenStruct object so than you could send another messages to get more info + +user.password_weak? => true/false # returns a boolean result of checking of weakness of your set password +``` + ### Default parameters _A score of less than 3 is not recommended._ - # config/initializers/devise.rb - Devise.setup do |config| - config.min_password_score = 4 - end +```ruby +# config/initializers/devise.rb +Devise.setup do |config| + config.min_password_score = 4 +end +``` ### Error Message The default error message: - "not strong enough. It scored %{score}. It must score at least %{min_password_score}." +```yml +"not strong enough. It scored %{score}. It must score at least %{min_password_score}." +``` You can customize this error message modifying the `devise` YAML file. -The `feedback`, `crack_time_display`, `score` and `min_password_score` variables are passed through if you need them. +The `crack_time_display`, `password_sample`, `score` and `min_password_score` variables are passed through if you need them. - # config/locales/devise.en.yml - en: - errors: - messages: - weak_password: "not strong enough. Consider adding a number, symbols or more letters to make it stronger." +```yml +# config/locales/devise.en.yml +en: + errors: + messages: + weak_password: "not strong enough. Consider adding a number, symbols or more letters to make it stronger." +``` +### Skipping password complexity validation +To turn off password complexity validation for certain conditions, you could implement a concern (or similar) that overloads `skip_password_complexity?`: + +```ruby +def skip_password_complexity? + true +end +``` + ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) -3. Commit your changes (`git commit -am 'Add some feature'`) -4. Push to the branch (`git push origin my-new-feature`) -5. Create new Pull Request +3. Add test coverage for the feature, We use rspec for this purpose +4. Commit your changes (`git commit -am 'Add some feature'`) +5. Push to the branch (`git push origin my-new-feature`) +6. Create new Pull Request