Index: modules/openid/openid.module =================================================================== RCS file: /cvs/drupal/drupal/modules/openid/openid.module,v retrieving revision 1.19.2.9 diff -u -p -r1.19.2.9 openid.module --- modules/openid/openid.module 7 Dec 2009 12:52:22 -0000 1.19.2.9 +++ modules/openid/openid.module 1 Jul 2010 21:31:17 -0000 @@ -95,7 +95,7 @@ function openid_form_alter(&$form, $form 'data' => l(t('Cancel OpenID login'), '#'), 'class' => 'user-link', ); - + $form['openid_links'] = array( '#value' => theme('item_list', $items), '#weight' => 1, @@ -225,7 +225,7 @@ function openid_complete($response = arr if (count($response) == 0) { $response = _openid_response(); } - + // Default to failed response $response['status'] = 'failed'; if (isset($_SESSION['openid']['service']['uri']) && isset($_SESSION['openid']['claimed_id'])) { @@ -398,6 +398,14 @@ function openid_authentication($response } } elseif (variable_get('user_register', 1)) { + // Fall back to openid.ext1.value.email for OpenID providers like Google. + if (empty($response['openid.sreg.email']) && !empty($response['openid.ext1.value.email'])) { + $response['openid.sreg.email'] = $response['openid.ext1.value.email']; + } + if (empty($response['openid.sreg.nickname']) && !empty($response['openid.ext1.value.email'])) { + $email = explode('@', $response['openid.ext1.value.email']); + $response['openid.sreg.nickname'] = $email[0]; + } // Register new user $form_state['redirect'] = NULL; $form_state['values']['name'] = (empty($response['openid.sreg.nickname'])) ? '' : $response['openid.sreg.nickname']; @@ -494,6 +502,12 @@ function openid_authentication_request($ $request['openid.sreg.required'] = 'nickname,email'; $request['openid.ns.sreg'] = "http://openid.net/extensions/sreg/1.1"; + // Google Federated Login + $request['openid.ns.ext1'] = "http://openid.net/srv/ax/1.0"; + $request['openid.ext1.mode'] = 'fetch_request'; + $request['openid.ext1.type.email'] = 'http://schema.openid.net/contact/email'; + $request['openid.ext1.required'] = 'email'; + $request = array_merge($request, module_invoke_all('openid', 'request', $request)); return $request;