* @since 2.0 */ class OpenId extends \yii\authclient\OpenId implements ProviderInterface { use ProviderTrait; /** * @inheritdoc */ public function authenticate() { if (!empty($_REQUEST['openid_mode'])) { switch ($_REQUEST['openid_mode']) { case 'id_res': if ($this->validate()) { $attributes = array( 'id' => $this->identity ); $rawAttributes = $this->getAttributes(); foreach ($this->getRequiredAttributes() as $openIdAttributeName) { if (isset($rawAttributes[$openIdAttributeName])) { $attributes[$openIdAttributeName] = $rawAttributes[$openIdAttributeName]; } else { throw new Exception('Unable to complete the authentication because the required data was not received.'); } } $this->setAttributes($attributes); $this->isAuthenticated = true; return true; } else { throw new Exception('Unable to complete the authentication because the required data was not received.'); } break; case 'cancel': $this->redirectCancel(); break; default: throw new HttpException(400); break; } } else { $this->identity = $this->authUrl; // Setting identifier $this->required = []; // Try to get info from openid provider foreach ($this->getRequiredAttributes() as $openIdAttributeName) { $this->required[] = $openIdAttributeName; } $request = Yii::$app->getRequest(); $this->realm = $request->getHostInfo(); $this->returnUrl = $this->realm . $request->getUrl(); // getting return URL $url = $this->authUrl(); return Yii::$app->getResponse()->redirect($url); } return false; } }