0
# 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
4

0 回答 0