Как мне войти в систему с помощью Yii и OpenID - PullRequest
6 голосов
/ 12 августа 2011

Я добавил simpleopenidselector и lightopenid в мое веб-приложение Yii, и оно аутентифицирует пользователя и возвращает URL с данными openid. Следующим шагом будет использование данных от поставщика OpenID для создания нового идентификатора в Yii для входа в систему пользователя. Как это сделать с Yii?

Кроме того, я думаю, что мне нужно создать таблицу openid для хранения openid, а также добавить пользователя в мою таблицу пользователей. Если у пользователя уже есть учетная запись, добавьте openid к его учетной записи, чтобы предотвратить создание нескольких учетных записей.

Кто-нибудь достиг всего этого с Yii? Если так, то мне было бы очень интересно, как это было достигнуто.

1 Ответ

1 голос
/ 16 августа 2011

Чтобы использовать данные из openID для входа в систему Yii, вы можете изменить / перезаписать класс UserIdentity (защищенный / компоненты).

Перезаписать существующий метод аутентификации. На этом этапе вы также можете установить текущее имя пользователя Yii, например:

$this->username=$openId->username

(где $openId->username следует заменить на переменную, содержащую имя пользователя openID)

Перезаписав действие side / login, вы можете вызвать модифицированный метод, например так:

$identity=new UserIdentity("m","m");//where m is dummy
if($identity->authenticate()) {
           Yii::app()->user->login($identity);
[...]
}

// Обновление (из-за вашего комментария): Не уверен, правильно ли я понимаю вашу проблему. Но что насчет добавления нового метода в UserIdentity, например authenticateOID (). вызовите этот метод в начале исходного метода authenticate (), например, так:

if ($this->authenticateOID) {/*set username & return true to end the method here*/}
else {/*original authenticate method from Yii*/}

Внутри authenticateOID() вы проверяете, выполнена ли аутентификация OID и / или находится ли пользователь в вашей локальной "OID - таблица пользователей"

...