diff --git a/modules/openid/openid.module b/modules/openid/openid.module index f1885df..74d8358 100644 --- a/modules/openid/openid.module +++ b/modules/openid/openid.module @@ -291,7 +291,7 @@ function openid_complete($response = array()) { * @return Array of services discovered (including OpenID version, endpoint * URI, etc). */ -function openid_discovery($claimed_id) { +function openid_discovery(&$claimed_id) { module_load_include('inc', 'openid'); module_load_include('inc', 'openid', 'xrds'); @@ -308,6 +308,12 @@ function openid_discovery($claimed_id) { $result = drupal_http_request($xrds_url, $headers); if (!isset($result->error)) { + + // Replace user entered claimed_id if we get 302 "Found" redirect + if ($result->code == 302 && !empty($result->redirect_url)) { + $claimed_id = $result->redirect_url; + } + if (isset($result->headers['Content-Type']) && preg_match("/application\/xrds\+xml/", $result->headers['Content-Type'])) { // Parse XML document to find URL $services = xrds_parse($result->data);