Пример #1
0
 /**
  * Logs the user in if this social account has been already used. Otherwise shows registration form.
  * @param  ClientInterface $client
  * @return \yii\web\Response
  */
 public function authenticate(ClientInterface $client)
 {
     $attributes = $client->getUserAttributes();
     $provider = $client->getId();
     $clientId = $attributes['id'];
     $account = UserAccount::find()->where(['provider' => $provider, 'client_id' => $clientId])->one();
     if ($account === null) {
         $account = \Yii::createObject(['class' => UserAccount::className(), 'provider' => $provider, 'client_id' => $clientId, 'data' => json_encode($attributes), 'created_at' => time()]);
         $account->save(false);
     }
     if (null === ($user = $account->user)) {
         $this->action->successUrl = Url::to(['/site/connect', 'account_id' => $account->id]);
     } else {
         \Yii::$app->user->login($user, 1209600);
         // two weeks
     }
 }
Пример #2
0
 /**
  * 绑定第三方账号
  * @param  ClientInterface $client
  * @return \yii\web\Response
  */
 public function connect(ClientInterface $client)
 {
     $attributes = $client->getUserAttributes();
     $provider = $client->getId();
     $clientId = $attributes['id'];
     $account = $this->finder->findAccountByProviderAndClientId($provider, $clientId);
     if ($account === null) {
         $account = Yii::createObject(['class' => UserAccount::className(), 'provider' => $provider, 'client_id' => $clientId, 'data' => json_encode($attributes), 'user_id' => Yii::$app->user->id, 'created_at' => time()]);
         $account->save(false);
         Yii::$app->session->setFlash('success', '账号绑定成功');
     } else {
         Yii::$app->session->setFlash('error', '绑定失败,此账号已经绑定过了');
     }
     $this->action->successUrl = Url::to(['/user/setting/networks']);
 }
Пример #3
0
 /**
  * @return Account[] Connected accounts ($provider => $account)
  */
 public function getAccounts()
 {
     $connected = [];
     $accounts = $this->hasMany(UserAccount::className(), ['user_id' => 'id'])->all();
     // @var Account $account
     foreach ($accounts as $account) {
         $connected[$account->provider] = $account;
     }
     return $connected;
 }