Skip to content
This repository has been archived by the owner on Mar 27, 2023. It is now read-only.

Commit

Permalink
allow Oauth to log in members or users
Browse files Browse the repository at this point in the history
  • Loading branch information
NealJMD committed Mar 28, 2016
1 parent 6e543ae commit 08ffc62
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 12 deletions.
5 changes: 3 additions & 2 deletions app/controllers/authentications_controller.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
class AuthenticationsController < Devise::OmniauthCallbacksController
def google_oauth2
# we override the devise mapping because routing sets it to user
request.env["devise.mapping"] = Devise.mappings[session[:authenticating].to_sym]
user_type = session[:authenticating].to_sym
request.env["devise.mapping"] = Devise.mappings[user_type]

@user = ConnectWithOauthProvider.connect(request.env["omniauth.auth"])
@user = ConnectWithOauthProvider.connect(request.env["omniauth.auth"], user_type)

flash[:notice] = I18n.t "devise.omniauth_callbacks.success", kind: "Google"
sign_in_and_redirect @user, event: :authentication
Expand Down
3 changes: 1 addition & 2 deletions app/models/member.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
class Member < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable
:recoverable, :rememberable, :trackable, :validatable

has_one :customer, class_name: "Payment::BraintreeCustomer"
has_paper_trail on: [:update, :destroy]
Expand Down
23 changes: 16 additions & 7 deletions app/services/connect_with_oauth_provider.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@
class Champaign::NotWhitelisted < StandardError; end;

class ConnectWithOauthProvider
def self.connect(data)
new(data).connect
def self.connect(data, type)
new(data, type).connect
end

def initialize(resp)
def initialize(resp, type)
@resp = resp
@type = type.to_sym
end

def connect
raise Champaign::NotWhitelisted unless whitelisted
raise Champaign::NotWhitelisted unless whitelisted || is_member?

return connected_user if user_already_connected

Expand All @@ -28,11 +29,11 @@ def whitelisted
end

def connected_user
@connected_user ||= User.find_by(provider: @resp.provider, uid: @resp.uid)
@connected_user ||= user_class.find_by(provider: @resp.provider, uid: @resp.uid)
end

def disconnected_user
@disconnected_user ||= User.find_by(email: @resp.info.email)
@disconnected_user ||= user_class.find_by(email: @resp.info.email)
end

def updated_disconnected_user
Expand All @@ -41,7 +42,7 @@ def updated_disconnected_user
end

def create_user
@created_user ||= User.create!(
@created_user ||= user_class.create!(
provider: @resp.provider,
email: @resp.info.email,
uid: @resp.uid,
Expand All @@ -57,6 +58,14 @@ def whitelist
Settings.oauth_domain_whitelist
end

def user_class
is_member? ? Member : User
end

def is_member?
@type == :member
end

alias_method :user_exists_but_disconnected, :disconnected_user
alias_method :user_already_connected, :connected_user
end
Expand Down
6 changes: 6 additions & 0 deletions db/migrate/20160328214521_add_uid_to_member.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class AddUidToMember < ActiveRecord::Migration
def change
add_column :members, :provider, :string
add_column :members, :uid, :string
end
end
4 changes: 3 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 20160316194728) do
ActiveRecord::Schema.define(version: 20160328214521) do

# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
Expand Down Expand Up @@ -184,6 +184,8 @@
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email"
t.string "provider"
t.string "uid"
end

add_index "members", ["actionkit_user_id"], name: "index_members_on_actionkit_user_id", using: :btree
Expand Down

0 comments on commit 08ffc62

Please sign in to comment.