mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
FEATURE: optionally get extra profile info from facebook
This feature requires the application be approved by facebook, so it is default off
This commit is contained in:
parent
5b3cd3fac9
commit
8dc4329094
6 changed files with 54 additions and 4 deletions
|
@ -86,7 +86,6 @@ class UserAvatar < ActiveRecord::Base
|
|||
|
||||
|
||||
rescue => e
|
||||
p e
|
||||
# skip saving, we are not connected to the net
|
||||
Rails.logger.warn "#{e}: Failed to download external avatar: #{avatar_url}, user id #{ user.id }"
|
||||
ensure
|
||||
|
|
|
@ -1019,6 +1019,7 @@ en:
|
|||
enable_facebook_logins: "Enable Facebook authentication, requires facebook_app_id and facebook_app_secret"
|
||||
facebook_app_id: "App id for Facebook authentication, registered at https://developers.facebook.com/apps"
|
||||
facebook_app_secret: "App secret for Facebook authentication, registered at https://developers.facebook.com/apps"
|
||||
facebook_request_extra_profile_details: "Request about me, location and website from facebook. (requires that your auth application be approved by facebook)"
|
||||
|
||||
enable_github_logins: "Enable Github authentication, requires github_client_id and github_client_secret"
|
||||
github_client_id: "Client id for Github authentication, registered at https://github.com/settings/applications"
|
||||
|
|
|
@ -277,6 +277,8 @@ login:
|
|||
facebook_app_secret:
|
||||
default: ''
|
||||
regex: "^[a-f0-9]+$"
|
||||
facebook_request_extra_profile_details:
|
||||
default: false
|
||||
enable_github_logins:
|
||||
client: true
|
||||
default: false
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
class AddFieldsToFacebookUserInfo < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :facebook_user_infos, :about_me, :text
|
||||
add_column :facebook_user_infos, :location, :string
|
||||
add_column :facebook_user_infos, :website, :text
|
||||
end
|
||||
end
|
|
@ -35,6 +35,20 @@ class Auth::FacebookAuthenticator < Auth::Authenticator
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
bio = facebook_hash[:about_me]
|
||||
location = facebook_hash[:location]
|
||||
website = facebook_hash[:website]
|
||||
|
||||
if user && (bio || location || website)
|
||||
profile = user.user_profile
|
||||
|
||||
profile.bio_raw = bio unless profile.bio_raw.present?
|
||||
profile.location = location unless profile.location.present?
|
||||
profile.website = website unless profile.website.present?
|
||||
profile.save
|
||||
end
|
||||
|
||||
if email.blank?
|
||||
UserHistory.create(
|
||||
action: UserHistory.actions[:facebook_no_email],
|
||||
|
@ -55,6 +69,17 @@ class Auth::FacebookAuthenticator < Auth::Authenticator
|
|||
user.save
|
||||
end
|
||||
|
||||
bio = data[:about_me]
|
||||
location = data[:location]
|
||||
website = data[:website]
|
||||
|
||||
if bio || location || website
|
||||
user.user_profile.bio_raw = bio
|
||||
user.user_profile.location = location
|
||||
user.user_profile.website = website
|
||||
user.user_profile.save
|
||||
end
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
|
@ -65,7 +90,10 @@ class Auth::FacebookAuthenticator < Auth::Authenticator
|
|||
strategy = env["omniauth.strategy"]
|
||||
strategy.options[:client_id] = SiteSetting.facebook_app_id
|
||||
strategy.options[:client_secret] = SiteSetting.facebook_app_secret
|
||||
strategy.options[:info_fields] = 'gender,email,name,bio,first_name,link,last_name'
|
||||
strategy.options[:info_fields] = 'gender,email,name,bio,first_name,link,last_name,website,location'
|
||||
if SiteSetting.facebook_request_extra_profile_details
|
||||
strategy.options[:scope] = 'email,user_about_me,user_location,user_website'
|
||||
end
|
||||
},
|
||||
:scope => "email"
|
||||
end
|
||||
|
@ -79,6 +107,8 @@ class Auth::FacebookAuthenticator < Auth::Authenticator
|
|||
|
||||
email = auth_token["info"][:email]
|
||||
|
||||
website = (info["urls"] && info["urls"]["Website"]) || nil
|
||||
|
||||
{
|
||||
facebook: {
|
||||
facebook_user_id: auth_token["uid"],
|
||||
|
@ -89,7 +119,10 @@ class Auth::FacebookAuthenticator < Auth::Authenticator
|
|||
email: email,
|
||||
gender: raw_info["gender"],
|
||||
name: raw_info["name"],
|
||||
avatar_url: info["image"]
|
||||
avatar_url: info["image"],
|
||||
location: info["location"],
|
||||
website: website,
|
||||
about_me: info["description"]
|
||||
},
|
||||
email: email,
|
||||
email_valid: true
|
||||
|
|
|
@ -20,7 +20,12 @@ describe Auth::FacebookAuthenticator do
|
|||
}
|
||||
},
|
||||
"info" => {
|
||||
:email => user.email
|
||||
:email => user.email,
|
||||
"location" => "America",
|
||||
"description" => "bio",
|
||||
"urls" => {
|
||||
"Website" => "https://awesome.com"
|
||||
}
|
||||
},
|
||||
"uid" => "100"
|
||||
}
|
||||
|
@ -28,6 +33,9 @@ describe Auth::FacebookAuthenticator do
|
|||
result = authenticator.after_authenticate(hash)
|
||||
|
||||
expect(result.user.id).to eq(user.id)
|
||||
expect(result.user.user_profile.website).to eq("https://awesome.com")
|
||||
expect(result.user.user_profile.bio_raw).to eq("bio")
|
||||
expect(result.user.user_profile.location).to eq("America")
|
||||
end
|
||||
|
||||
it 'can create a proper result for non existing users' do
|
||||
|
|
Loading…
Reference in a new issue