Skip to content

Instantly share code, notes, and snippets.

@kevinhq
kevinhq / Gemfile
Last active June 23, 2020 11:44
Gemfile for Two-Factor authentication with devise and active_model_otp gem
gem 'devise', '~> 4.7.1'
gem 'active_model_otp', '~> 2.0.1'
gem 'rqrcode', '~> 1.1.2
@kevinhq
kevinhq / Gemfile
Created June 23, 2020 11:47
Gemfile for Two-Factor authentication with devise and active_model_otp gem
gem 'devise', '~> 4.7.1'
gem 'active_model_otp', '~> 2.0.1'
gem 'rqrcode', '~> 1.1.2
@kevinhq
kevinhq / sessions_controller.rb
Created June 23, 2020 11:48
Two-Factor authentication with devise - override sessions controller
# /app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
def create
self.resource = resource_class.find_for_authentication(sign_in_params.except(:password, :otp_response_code))
if resource
if resource.active_for_authentication?
if resource && resource.otp_module_disabled?
continue_sign_in(resource, resource_name)
elsif resource && resource.otp_module_enabled?
@kevinhq
kevinhq / two_factors_authentication.html.erb
Created June 23, 2020 11:49
Two-Factor authentication - form after login
<%# /app/views/users/sessions/two_factors_authentication.html.erb %>
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :role => 'form', :method => 'POST' }) do |f| %>
<%= f.hidden_field :email, value: params[:user][:email] %>
<%= f.text_field :otp_response_code %>
<%= f.submit %>
<% end %>
@kevinhq
kevinhq / users_controller.rb
Created June 23, 2020 11:49
Two-Factor authentication users controller
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def activate_2fa
qrcode = RQRCode::QRCode.new(current_user.provisioning_uri(nil, issuer: 'your-app-url.com'), :size => 12, :level => :h)
@svg = qrcode.as_svg(offset: 0, color: '000',
shape_rendering: 'crispEdges',
module_size: 4)
respond_to :html
end
@kevinhq
kevinhq / Gemfile
Created July 3, 2020 06:14
Optimize Rails app with Bullet - Gemfile
gem 'bullet', '~> 6.1.0'
@kevinhq
kevinhq / Gemfile
Created July 3, 2020 06:15
Gemfile with custom environment
group :optimization do
gem 'bullet', '~> 6.1.0'
end
@kevinhq
kevinhq / optimization.rb
Created July 3, 2020 06:16
Place this on config/environments/optimization.rb
config.after_initialize do
Bullet.enable = true
Bullet.alert = true
Bullet.bullet_logger = true
Bullet.console = true
Bullet.rails_logger = true
Bullet.add_footer = true
end
@kevinhq
kevinhq / mime_types.rb
Last active July 6, 2020 20:59
Create AMP in Rails powered website - mime_types.rb
# config/initializers/mime_types.rb
Mime::Type.register 'text/html', :amp
@kevinhq
kevinhq / samples_controller.rb
Last active July 9, 2020 01:47
Create AMP in Rails powered website - samples_controller.rb
# app/controllers/samples_controller.rb
Class SamplesController
# other existing methods
def show
# your existing codes
respond_to do |format|
format.html
format.amp { render 'amp/samples/show.amp', layout: 'amp/layouts/application' }
end