Пример #1
0
 /**
  * check if the user has data in the user provider table.  If not add it.  Then log them in
  */
 public function callback($provider_name)
 {
     $auth_user = Auth::user();
     $redir = session('oauth_redir');
     session()->forget('oauth_redir');
     try {
         $provider = Provider::where('provider_safe_name', '=', $provider_name)->firstOrFail();
     } catch (ModelNotFoundException $e) {
         echo 'Caught exception: ', $e->getMessage(), "\n";
         exit;
     }
     $user = Socialite::driver($provider_name)->user();
     $local_user = UserProvider::where('provider_key', $user['id'])->first();
     if (count($local_user)) {
         $local_user = $local_user->user()->first();
     } else {
         if (empty($auth_user)) {
             $local_user = User::where('email', $user['email'])->first();
         } else {
             $local_user = $auth_user;
         }
         //not found by email either
         if (!count($local_user)) {
             //create user
             $local_user = User::create(['first_name' => $user['name'], 'email' => $user['email']]);
             UserProvider::create(['provider_id' => $provider->id, 'user_id' => $local_user['id'], 'provider_key' => $user['id']]);
         } else {
             //update user with
             UserProvider::create(['provider_id' => $provider->id, 'user_id' => $local_user['id'], 'provider_key' => $user['id']]);
         }
     }
     Auth::login($local_user, true);
     switch ($redir) {
         case "profile":
             Alert::add("Social network has been added to your profile", ["alert_type" => "success"]);
             break;
     }
     return redirect()->route($redir);
 }
Пример #2
0
 /**
  * Remove user a social network connection from a user
  *
  * @return view (via redirect)
  */
 public function remove_provider($provider_id)
 {
     $id = Auth::id();
     $deletedRows = UserProvider::where(['user_id' => $id, 'provider_id' => $provider_id])->delete();
     Alert::add("Social network removed from profile", ["alert_type" => "success"]);
     return redirect()->route('profile');
 }
Пример #3
0
 /**
  * Find user by provider
  *
  * @return app\models\User|null
  */
 private function findUserByProvider()
 {
     $profile = $this->client->getUserAttributes();
     $id = ArrayHelper::getValue($profile, 'id');
     if ($provider = UserProvider::findByProvider($this->type, $id)) {
         $user = $provider->user;
         $provider->setAttributes($this->parseProvider());
         $provider->save();
         return $user;
     }
     return null;
 }
Пример #4
0
 public function testFindByProvider()
 {
     expect_that($provider = UserProvider::findByProvider(UserProvider::TYPE_TWITTER, 'twitter-id'));
     expect($provider->user_id)->equals(2);
     expect_not(UserProvider::findByProvider(UserProvider::TYPE_TWITTER, 'wrong-id'));
 }