This project is no longer maintained.
If you have a more recent fork and youâd like us to link to it from here, please get in touch.
¶ â
Devise Google AuthenticatorThis is a devise extension to allow your app to utilise Google Authenticator for Time-based One Time Passwords (TOTP).
¶ â
InstallationAdd the gem to your Gemfile (donât forget devise too):
-
gem âdeviseâ
-
gem âdevise_google_authenticatorâ, â0.3.16â
Donât forget to âbundle installâ
¶ â
Devise Installation (In case you havenât done it)Before you can setup Devise Google Authenticator you need to setup Devise first, you need to do the following (but refer to github.com/plataformatec/devise for more information)
Install Devise:
-
rails g devise:install
Setup the User or Admin model
-
rails g devise MODEL
Configure your app for authorisation, edit your Controller and add this before_filter:
-
before_filter :authenticate_user!
Make sure your ârootâ route is configured in config/routes.rb
¶ â
Automatic Installation (Lets assume this is a bare bones app)Run the following generator to add the necessary configuration options to Deviseâs config file:
-
rails g devise_google_authenticator:install
After youâve created your Devise user models (which is usually done with a ârails g devise MODELâ), set up your Google Authenticator additions:
-
rails g devise_google_authenticator MODEL
Donât forget to migrate if youâre NOT using Mongoid as your database ORM, Mongoid installations will have appropriate fields added to the model after the command above:
-
rake db:migrate
¶ â
Installation With Existing UsersAfter the above steps have been performed, youâll need to generate secrets for each user:
User.where(:gauth_secret => nil).find_each do |user| user.send(:assign_auth_secret) user.save! end
By default, users wonât need to perform two-factor authentication (gauth_enabled=âfâ). By visiting /MODEL/displayqr (eg: /users/displayqr) and submitting the form, two-factor authentication will then be turned on (gauth_enabled=1) and required for subsequent logins.
¶ â
Configuration OptionsThe install generator adds some options to the end of your Devise config file (config/initializers/devise.rb)
-
config.ga_timeout - how long should the user be able to authenticate with their Google Authenticator token
-
config.ga_timedrift - a multiplier which provides for drift between a userâs clock (and therefore their OTP) and the system clock. This should be fine at 3.
-
config.ga_remembertime - how long to remember the token for before requiring another. By default this is 1 month. To disable this setting change it to nil.
-
config.ga_appname - If you want to set a custom application name instead of using the name of the Rails app.
-
config.ga_bypass_signup - If you donât want to immediately forward newly registered or signed-up users to the Display QR page. If this is enabled, users will have to visit the /displayqr page to enable Google Authenticator.
¶ â
Custom ViewsIf you want to customise your views (which you likely will want to, as theyâre pretty ugly right now), you can use the generator:
-
rails g devise_google_authenticator:views
¶ â
UsageWith this extension enabled, the following is expected behaviour:
-
When a user registers, they are forwarded onto the Display QR page (unless ga_bypass_signup is set to true). This allows them to add their new âtokenâ to their mobile device, and enable, or disable, the functionality. To enable/disable the functionality, the user has to enter the current token.
-
If users canât self-register, theyâre still able to visit this page by visiting /MODEL/displayqr (eg: /users/displayqr).
-
If the function is enabled (for that user), when they sign in, theyâll be prompted for their password (as per normal), but then redirected into the Check QR page. They have to enter their token (from their device) to then successfully authenticate.
-
If configured (by default to 1 month), the user will only be prompted for the token every 1 month.
¶ â
I18nThe install generator also installs an english copy of a Devise Google Authenticator i18n file. This can be modified (or used to create other language versions) and is located at: config/locales/devise.google_authenticator.en.yml
¶ â
Changes-
Version 0.3.16 - A few bug-fixes. Test-cases are now passing in Ruby 1.9.3 and 2.1.5
-
Version 0.3.15 - Can now configure whether the displayqr page is displayed during sign-up. Can customise the appâs name (thanks Felipe Lima). Require the users to enter the token when enabling or disabling the token (thanks again Felipe Lima). Handle namespaced Devise models (thanks Mikkel Garcia). Ability to set an Issuer within the OTP generation (thanks Sylvain UTARD).
-
Version 0.3.14 - Users can now generate a new token if they wish. This is available from the displayqr page.
-
Version 0.3.13 - Merged a feature to allow a qualifier for the Google Authenticator token display. This allows you to specify in your view a qualifier for the name of the OTP when itâs enrolled into the Google Authenticator app. Thanks Michael Guymon for the pull.
-
Version 0.3.12 - Re-introduced Wardenâs after_authentication callback. Thanks Sunny Ng for the pull.
-
Version 0.3.11 - Fixed a bug where if the Devise module was included within something else, such as Active Admin, rewriting back to the CheckGA functionality was broken. This update addresses github.com/AsteriskLabs/devise_google_authenticator/issues/7
-
Version 0.3.10 - Added support for Mongoid ORM in addition to ActiveRecord. (Still no appropriate testing for, but Iâve run this on vanilla Rails 4.0.4 and Devise 3.2.3 apps)
-
Version 0.3.9 - Merging fix from zhenyuchen (deprecated ActiveRecord query grammar) - also, re-tested against Rails 4.0.4 and Devise 3.2.3
-
Version 0.3.8 - Support for remembering the token authentication. (i.e. donât request the token for a configurable amount of time Thanks github.com/blahblahblah-) - and seriously, Iâm going to try and refactor all the integration tests with Rspec.
-
Version 0.3.7 - Support for current Devise (3.2.0) and Rails4 (Thanks github.com/ronald05arias) - integration test still broke - need to address this
-
Version 0.3.6 - Slight updates - increased key size, more open gemspec, updated en.yml. (Thanks Michael Guymon)
-
Version 0.3.5 - Updated README for Rails apps with existing users. (Thanks Jon Collier)
-
Version 0.3.4 - Updated test cases to function properly, and tested working with Devise 2.2 (up to at least Devise 2.2.4)
-
Version 0.3.3 - Updated some of the redirect methods to proper align with Devise 2.1.0. Also tidied up some of the test routines to proper replicate Devise 2.1.0
-
Version 0.3.2 - Updated to include support for Devise 2.0.0 and above (no longer supports 1.5.3 or lower), youâll need version 0.3.1 to use older Devise
-
Version 0.3.1 - Slight updated in the dependencies.
-
Version 0.3 - first working version! With working generators, tests, and doesnt require changes to Deviseâs Sign In view
-
Version 0.2 - tidied up some of the code - changed the references to AsteriskLabs
-
Version 0.1 - initial release, just to push it up, is still very early and requires a bit work
¶ â
Thanks (and unknown contributors)This extension would not exist without the following other projects and associated authors (Whom I have turned to for inspiration and definitely have helped contributing by providing awesome Devise extensions. A lot of this code has been refactored from various sources, in particular these - in particular Sergio and Devise_invitable for his excellent unit test code):
-
Devise (José Valim, Carlos AntÎnio da Silva, Rodrigo Flores) github.com/plataformatec/devise
-
Devise_invitable (Sergio Cambra) github.com/scambra/devise_invitable
-
Devise_openid_authenticatable (Nat Budin) github.com/nbudin/devise_openid_authenticatable
-
Devise_security_extension (Team Phatworx, Marco Scholl, Alexander Dreher) github.com/phatworx/devise_security_extension
-
Ronald Arias github.com/ronald05arias
-
Sunny Ng github.com/blahblahblah-
-
Michael Guymon github.com/mguymon
-
Mikkel Garcia github.com/mikkel
-
Ricky Reusser github.com/rreusser
-
Felipe Lima github.com/felipecsl
-
Sylvain Utard github.com/redox
¶ â
Contributing to devise_google_authenticator-
Check out the latest master to make sure the feature hasnât been implemented or the bug hasnât been fixed yet
-
Check out the issue tracker to make sure someone already hasnât requested it and/or contributed it
-
Fork the project
-
Start a feature/bugfix branch
-
Commit and push until you are happy with your contribution
-
Make sure to add tests for it. This is important so I donât break it in a future version unintentionally.
-
Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
¶ â
CopyrightCopyright © 2014 Christian Frichot. See LICENSE.txt for further details.