# frozen_string_literal: true
devise.rb
Devise.setup do |config|
config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
require 'devise/orm/active_record'
config.case_insensitive_keys = [:email]
config.strip_whitespace_keys = [:email]
config.skip_session_storage = [:http_auth]
config.stretches = Rails.env.test? ? 1 : 12
config.reconfirmable = true
config.expire_all_remember_me_on_sign_out = true
config.password_length = 6..128
config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
config.reset_password_within = 6.hours
config.sign_out_via = :delete
config.omniauth :github, 'f02740904c4df9c19276', 'c2e2e7eee7c3d0b3ae5dbe00fc6fd8c5369016b1'
config.omniauth :google_oauth2, '598952698503-lnqu03718dj70ebsc9nutvm9sapgvg21.apps.googleusercontent.com', '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'
config.omniauth :facebook, '3102341203387277', '752bd2100cd8f2ac9cdbe08d6539f24a'
config.omniauth :twitter, 'Lqu3weqA4Wy1j6qQFJLYEvGJu','uUjwDUubdjaDVpD1LoEEdWnSa2Y9bCPg2zRaN0szuLkBmzGjZL0..'
end
# omniauthcallback controller
# frozen_string_literal: true
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
# app/controllers/users/omniauth_callbacks_controller.rb:
def twitter
handle_auth 'twitter'
end
def google_oauth2
handle_auth 'Google'
end
def facebook
handle_auth 'facebook'
end
def github
handle_auth 'Github'
end
def handle_auth(kind)
@user = User.from_omniauth(request.env['omniauth.auth'])
if @user.persisted?
flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'kind'
sign_in_and_redirect @user, event: :authentication
else
session['devise.auth_data'] = request.env['omniauth.auth'].except('extra') # Removing extra as it can overflow some session stores
sign_in_and_redirect @user, alert: @user.errors.full_messages.join("\n")
end
end
end
# user modal
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,:omniauthable, omniauth_providers: [:github,:google_oauth2,:facebook,:twitter]
def self.from_omniauth(access_token)
data = access_token.info
user = User.where(email: data['email']).first
unless user
user = User.create(
email: data['email'],
password: Devise.friendly_token[0,20]
)
end
user
end
end