Авторизация через соц. сети [Fatal error]

Пишите о найденных ошибках в эту тему

Модераторы: Xpycm, Koduc

Правила форума
ВНИМАНИЕ! Форум не является средством гарантированной поддержки клиентов и пользователей. Поэтому на быстрый ответ тут рассчитывать не нужно, как и на ответ вообще. Сотрудники отвечают по мере своих возможностей.

На форуме действует ограничение в 3 сообщения / сутки.
Если Вы хотите сказать "спасибо", то воспользуйтесь функцией "Повысить репутацию" - зелёная иконка "плюс" под ником ответившего.

Авторизация через соц. сети [Fatal error]

Сообщение Xpycm » 19 дек 2012, 09:01

У некоторых пользователей возникает такой вопрос: почему при авторизации через ту или иную социальную сеть выпадает ошибка:
Fatal error: Call to a member function delete() on a non-object in protected/controllers/SiteController.php on line 117

Это связано с тем, что сначала пользователь зарегистрировался через обычную форму регистрации
А затем пытается зарегистрироваться через социальную сеть, в аккаунте которой указан такой же email, какой был указан в форме регистрации.

Чтобы выдавать более дружелюбную ошибку ("такой email уже занят") вместо Fatal Error, откройте файл protected/controllers/SiteController.php и метод
Код: Выделить всё
public function createUser($email, $username = '', $phone = '', $activateKey = '', $isActive = false) {
    $model = new User;
    $model->email = $email;
    if ($username)
        $model->username = $username;
    if ($phone)
        $model->phone = $phone;
    if ($isActive)
        $model->active = 1;
    if ($activateKey)
        $model->activatekey = $activateKey;

    $password = $model->randomString();
    $model->setPassword($password);

    $return = array();

    if($model->save()){
        $return = array(
            'email' => $model->email,
            'username' => $model->username,
            'password' => $password,
            'id' => $model->id,
            'active' => $model->active,
            'activateKey' => $activateKey,
            'activateLink' => Yii::app()->createAbsoluteUrl('/site/activation?key='.$activateKey),
        );
    }
    return $return;
}
 


замените на:
Код: Выделить всё
public function createUser($email, $username = '', $phone = '', $activateKey = '', $isActive = false) {
    $model = new User;
    $model->email = $email;
    if ($username)
        $model->username = $username;
    if ($phone)
        $model->phone = $phone;
    if ($isActive)
        $model->active = 1;
    if ($activateKey)
        $model->activatekey = $activateKey;

    $password = $model->randomString();
    $model->setPassword($password);

    $return = array();

    if ($model->save()) {
        $return = array(
            'email' => $model->email,
            'username' => $model->username,
            'password' => $password,
            'id' => $model->id,
            'active' => $model->active,
            'activateKey' => $activateKey,
            'activateLink' => Yii::app()->createAbsoluteUrl('/site/activation?key=' . $activateKey)
        );
    }
    else {
        $errors = $model->getErrors();
        if ($errors) {
            foreach($errors as $error) {
                if ($error && is_array($error)) {
                    foreach($error as $item) {
                        echo '<div class="alert alert-block alert-error fade in">'.$item.'</div>';
                    }
                }
            }
        }
        exit;
    }
    return $return;
}
 


т.е добавили условие else, в котором будет выводится ошибка "email уже занят".
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50

Вернуться в Ошибки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

cron