За последние 24 часа нас посетили 21854 программиста и 988 роботов. Сейчас ищет 641 программист ...

Авторизация через ВК

Тема в разделе "Yii", создана пользователем Sema_qq, 16 апр 2017.

  1. Sema_qq

    Sema_qq Новичок

    С нами с:
    2 мар 2017
    Сообщения:
    9
    Симпатии:
    0
    Доброго времени суток.
    Хочу чтобы айди пользователя ВК сохранялось в отдельной колонке vk_id и если уже есть такой пользователь, то просто авторизация, если нет, соответственно регистрация.
    В контроллере:
    Код (Text):
    1. public function actionLoginVk($uid, $first_name, $photo)
    2.     {
    3.         $user = new User();
    4.         if ($user->saveFromVk($uid, $first_name, $photo))
    5.         {
    6.             return $this->redirect(['/site/index']);
    7.         }
    8.     }
    в модели:
    Код (Text):
    1. public function saveFromVk($uid, $name, $photo)
    2.     {
    3.         $user = User::findOne($uid);
    4.         if($user)
    5.         {
    6.             return Yii::$app->user->login($user);
    7.         }
    8.         $this->vk_id = $uid;
    9.         $this->name = $name;
    10.         $this->photo = $photo;
    11.         $this->create();
    12.         return Yii::$app->user->login($this);
    13.     }
    14. public function create()
    15. {
    16.     return $this->save(false);
    17. }
    правила в модели:
    Код (Text):
    1. [['vk_id'],'unique','targetClass'=>'app\models\User', 'targetAttribute'=>'vk_id']
    но мне каждый раз создает нового пользователя, id разное, vk_id одинаковое, если ставлю через миграции стобец vk_id->unique, то при повторной авторизации ошибка, типа такое значение уже есть
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    проверяй по vk_id а не по id, $uid
     
  3. Sema_qq

    Sema_qq Новичок

    С нами с:
    2 мар 2017
    Сообщения:
    9
    Симпатии:
    0
    Сделал:
    Код (Text):
    1. $user = User::findOne($this->vk_id);
    всё равно создает нового пользователя
     
  4. Sema_qq

    Sema_qq Новичок

    С нами с:
    2 мар 2017
    Сообщения:
    9
    Симпатии:
    0
    Спасибо, навели на мысль, дальше всё получилось!
    Код (Text):
    1. $user = User::find()->where(['vk_id'=>$uid])->one();