Поддержка OpenId для Yii - PullRequest
       21

Поддержка OpenId для Yii

22 голосов
/ 13 апреля 2011

Я хочу поиграть с поддержкой OpenID в Yii.

После поиска возможных плагинов я нашел эти два.Один для OpenidSelector и один для LightOpenId

http://www.yiiframework.com/extension/simpleopenidselector/

http://www.yiiframework.com/extension/loid

Являются ли эти расширения подходящими для использования в Yii для поддержки OpenId?Что-нибудь еще?И я хотел бы получить некоторую справочную информацию о том, что делать с этими расширениями, если они правильные.

Это то, что я думаю, что мне нужно сделать, помимо установки их в соответствии с инструкциями на странице.

  1. Создание OpenIdUserIdentity расширяет CUserIdentity и помещает туда код authenticate ()
  2. Создайте страницу входа и поместите код simpleopenidselector в представление.
  3. Создайте метод actionOpenIdLogin в siteController

тогда я в некотором роде растерялся, потому что я не понимаю пример использования в Loid, и я не уверен, как это сделать (1) и (3) выше.

Пожалуйста, дайте мнезнать, нахожусь ли я на правильном пути и, возможно, дать некоторые рекомендации.Благодарю.

Ответы [ 2 ]

10 голосов
/ 15 апреля 2011

Поработав некоторое время, я собираюсь ответить на свой вопрос. Вот как я заставляю его работать, чтобы вы могли изменить его в соответствии со своими потребностями.

Примечание: я использую userController вместо siteController, и, пожалуйста, следуйте всем инструкциям на соответствующей странице расширения.

Если вы использовали два плагина, как указано выше, то, что вам нужно сделать дальше, чтобы заставить его работать, это следующее: (это пошаговое руководство) Но наиболее важными шагами являются 2c и 3, они являются клеем для обоих плагинов

1) Иметь страницу входа, которая использует OpenidSelector. Поместите это в views / user / login.php

<?php
$this->widget('application.extensions.openidProviders.openidProviders', 
array ( 'options' => array ( 'lang' => 'en', 
//      'demo' => 'js:true',
    'cookie_expires' => 6*30,
    )));?>

2) Настройка действий для обработки выбора из openidSelector. Я положил это в userController.

a) В основном конфигурационном файле.

 'components'=>array(
    'user'=>array(
        // enable cookie-based authentication
        'allowAutoLogin'=>true,
        'loginUrl' => array('/user/login'), //change the default login page
    ),

b) В файле userController добавьте логин и выполните аутентификацию действий

array('allow',  // allow all users to perform 'index' and 'view' actions
  'actions'=>array('login', 'authenticate'),

Код для действия # 1 actionLogin - для запуска страницы просмотра входа в систему.

public function actionLogin()
{       
    // display the login form
    $this->render('login',array());
}

c) Код для действия # 2 actionAuthenticate - код, измененный со страницы инструкции LOID, он обрабатывается, когда на странице входа в систему выбран OpenIDProvider.

public function actionAuthenticate ()
{
   // Put the Simple usage: code on 
   // http://www.yiiframework.com/extension/loid here:

   // Code from loid Simple usage page.
   // START HERE
   $loid = Yii::app()->loid->load();
   if (!empty($_GET['openid_mode'])) {
       if ($_GET['openid_mode'] == 'cancel') {
         $err = Yii::t('core', 'Authorization cancelled');
       } else {
         try {
             echo $loid->validate() ? 'Logged in.' : 'Failed';
       } catch (Exception $e) {
             $err = Yii::t('core', $e->getMessage());
       }
   }
   if(!empty($err)) echo $err;
   } else {
       // **NOTE:Comment out this line from the loid sample page**
       // $loid->identity = "http://my.openid.identifier"; //Setting identifier
       // this openid_identifier is need after you click the openselector
       $loid->identity = $_GET['openid_identifier']; // CHANGE HERE

       $loid->required = array('namePerson/friendly', 'contact/email'); //Try to get info from openid provider
       $loid->realm     = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST']; 
       $loid->returnUrl = $loid->realm . $_SERVER['REQUEST_URI']; //getting return URL
       if (empty($err)) {
           try {
               $url = $loid->authUrl();
               $this->redirect($url);
           } catch (Exception $e) {
               $err = Yii::t('core', $e->getMessage());
           }
        }
    }
    // Code from loid Simple usage page.
    // END HERE
}

3) Измените URL действия на Аутентификацию в openidProviders / views / main-en.php

Изменение

form action="examples/consumer/try_auth.php" method="get" id="openid_form"

до

form action="authenticate" method="get" id="openid_form"

Так и должно быть. Не проверял случай сбоя, проверял только при входе в Google.

8 голосов
/ 21 июня 2012

enter image description here

Теперь существует YiiAuth , который использует библиотеку HybridAuth .

...