FEATURE: store twitter supplied email for auditing
This commit is contained in:
parent
a9cac72fb9
commit
67aecff59c
|
@ -0,0 +1,5 @@
|
||||||
|
class AddEmailToTwitterUserInfo < ActiveRecord::Migration[5.1]
|
||||||
|
def change
|
||||||
|
add_column :twitter_user_infos, :email, :string, limit: 1000, null: true
|
||||||
|
end
|
||||||
|
end
|
|
@ -16,6 +16,7 @@ class Auth::TwitterAuthenticator < Auth::Authenticator
|
||||||
twitter_user_id = auth_token["uid"]
|
twitter_user_id = auth_token["uid"]
|
||||||
|
|
||||||
result.extra_data = {
|
result.extra_data = {
|
||||||
|
twitter_email: result.email,
|
||||||
twitter_user_id: twitter_user_id,
|
twitter_user_id: twitter_user_id,
|
||||||
twitter_screen_name: result.username,
|
twitter_screen_name: result.username,
|
||||||
twitter_image: data["image"],
|
twitter_image: data["image"],
|
||||||
|
@ -26,11 +27,12 @@ class Auth::TwitterAuthenticator < Auth::Authenticator
|
||||||
user_info = TwitterUserInfo.find_by(twitter_user_id: twitter_user_id)
|
user_info = TwitterUserInfo.find_by(twitter_user_id: twitter_user_id)
|
||||||
|
|
||||||
result.user = user_info.try(:user)
|
result.user = user_info.try(:user)
|
||||||
if !result.user && result.email_valid && result.user = User.find_by_email(result.email)
|
if (!result.user) && result.email_valid && (result.user = User.find_by_email(result.email))
|
||||||
TwitterUserInfo.create(
|
TwitterUserInfo.create(
|
||||||
user_id: result.user.id,
|
user_id: result.user.id,
|
||||||
screen_name: result.username,
|
screen_name: result.username,
|
||||||
twitter_user_id: twitter_user_id
|
twitter_user_id: twitter_user_id,
|
||||||
|
email: result.email
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -46,7 +48,8 @@ class Auth::TwitterAuthenticator < Auth::Authenticator
|
||||||
TwitterUserInfo.create(
|
TwitterUserInfo.create(
|
||||||
user_id: user.id,
|
user_id: user.id,
|
||||||
screen_name: extra_data[:twitter_screen_name],
|
screen_name: extra_data[:twitter_screen_name],
|
||||||
twitter_user_id: extra_data[:twitter_user_id]
|
twitter_user_id: extra_data[:twitter_user_id],
|
||||||
|
email: extra_data[:email]
|
||||||
)
|
)
|
||||||
|
|
||||||
retrieve_avatar(user, extra_data)
|
retrieve_avatar(user, extra_data)
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe Auth::TwitterAuthenticator do
|
||||||
|
|
||||||
|
it "takes over account if email is supplied" do
|
||||||
|
auth = Auth::TwitterAuthenticator.new
|
||||||
|
|
||||||
|
user = Fabricate(:user)
|
||||||
|
|
||||||
|
auth_token = {
|
||||||
|
info: {
|
||||||
|
"email" => user.email,
|
||||||
|
"username" => "test",
|
||||||
|
"name" => "test",
|
||||||
|
"nickname" => "minion",
|
||||||
|
},
|
||||||
|
"uid" => "123"
|
||||||
|
}
|
||||||
|
|
||||||
|
result = auth.after_authenticate(auth_token)
|
||||||
|
|
||||||
|
expect(result.user.id).to eq(user.id)
|
||||||
|
|
||||||
|
info = TwitterUserInfo.find_by(user_id: user.id)
|
||||||
|
expect(info.email).to eq(user.email)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue