Skip to content
Snippets Groups Projects
Commit a9c6ab07 authored by Olav Morken's avatar Olav Morken
Browse files

authfacebook: Fix facebook authentication source.

This patch also changes the facebook authentication source to behave
more like the openid authentication source wrt. attribute naming.

Thanks to Brook Schofield for providing this patch!

git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@2655 44740490-163a-0410-bde0-09ae8108e29a
parent 4e12c1a8
No related branches found
No related tags found
No related merge requests found
<?php
$attributemap = array(
// Generated Facebook Attributes
'facebook_user' => 'eduPersonPrincipalName', // username OR uid @ facebook.com
'facebook_targetedID' => 'eduPersonTargetedID', // http://facebook.com!uid
'facebook_cn' => 'cn', // duplicate of displayName
// Attributes Returned by Facebook
'facebook.first_name' => 'givenName',
'facebook.last_name' => 'sn',
'facebook.name' => 'displayName', // or 'cn'
'facebook.email' => 'mail',
//'facebook.pic' => 'jpegPhoto', // URL not image data
//'facebook.pic_square' => 'jpegPhoto', // URL not image data
'facebook.username' => 'uid', // facebook username (maybe blank)
//'facebook.uid' => 'uid', // numeric facebook user id
'facebook.profile_url' => 'labeledURI',
'facebook.locale' => 'preferredLanguage',
'facebook.about_me' => 'description',
);
......@@ -217,6 +217,7 @@ class Facebook {
public function get_login_url($next, $canvas) {
return self::get_facebook_url().'/login.php?v=1.0&api_key=' . $this->api_key .
($next ? '&next=' . urlencode($next) : '') .
'&req_perms=email' .
($canvas ? '&canvas' : '');
}
......
......@@ -70,23 +70,32 @@ class sspmod_authfacebook_Auth_Source_Facebook extends SimpleSAML_Auth_Source {
SimpleSAML_Logger::debug('facebook auth state id = ' . $stateID);
$facebook = new Facebook($this->api_key, $this->secret);
$u = $facebook->require_login($stateID);
$u = $facebook->require_login(SimpleSAML_Module::getModuleUrl('authfacebook') . '/linkback.php?next=' . $stateID);
# http://developers.facebook.com/documentation.php?v=1.0&method=users.getInfo
/* Causes an notice / warning...
if ($facebook->api_client->error_code) {
throw new Exception('Unable to load profile from facebook');
}
*/
$info = $facebook->api_client->users_getInfo($u, array('first_name', 'last_name'));
$fullname = $info[0]['first_name'] .' '. $info[0]['last_name'];
// http://developers.facebook.com/docs/reference/rest/users.getInfo
$info = $facebook->api_client->users_getInfo($u, array('uid', 'first_name', 'middle_name', 'last_name', 'name', 'locale', 'current_location', 'affiliations', 'pic_square', 'profile_url', 'sex', 'email', 'pic', 'username', 'about_me', 'status', 'profile_blurb'));
$attributes = array(
'sn' => array($info[0]['last_name']),
'givenName' => array($info[0]['first_name']),
'cn' => array($info[0]['first_name'] .' '. $info[0]['last_name']),
'uid' => array($u),
'eduPersonPrincipalName' => array('facebook:' . $u),
);
$attributes = array();
foreach($info[0] AS $key => $value) {
if (is_string($value) && !empty($value))
$attributes['facebook.' . $key] = array((string)$value);
}
if (array_key_exists('username', $info[0]) )
$attributes['facebook_user'] = array($info[0]['username'] . '@facebook.com');
else
$attributes['facebook_user'] = array($u . '@facebook.com');
$attributes['facebook_targetedID'] = array('http://facebook.com!' . $u);
$attributes['facebook_cn'] = array($info[0]['name']);
SimpleSAML_Logger::debug('Facebook Returned Attributes: '. implode(", ",array_keys($attributes)));
$state['Attributes'] = $attributes;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment