예제 #1
0
 public function doFbLogin()
 {
     // Endpoint that is redirected to after an authentication attempt
     /**
      * Obtain an access token.
      */
     try {
         $token = Facebook::getTokenFromRedirect();
         if (!$token) {
             return Redirect::to('/login')->with('error', 'Unable to obtain access token.');
         }
     } catch (FacebookQueryBuilderException $e) {
         return Redirect::to('/login')->with('error', $e->getPrevious()->getMessage());
     }
     if (!$token->isLongLived()) {
         /**
          * Extend the access token.
          */
         try {
             $token = $token->extend();
         } catch (FacebookQueryBuilderException $e) {
             return Redirect::to('/')->with('error', $e->getPrevious()->getMessage());
         }
     }
     $actoken = $token;
     Facebook::setAccessToken($token);
     /**
      * Get basic info on the user from Facebook.
      */
     try {
         $fbData = Facebook::object('me')->fields('id', 'name', 'email')->get();
         $count = DB::collection('users')->where('email', $fbData['email'])->count();
         if ($count > 0) {
             $data = array();
             $data['fbId'] = $fbData['id'];
             $data["name"] = $fbData['name'];
             $data["access_token"] = $token;
             DB::collection('users')->where('email', $fbData['email'])->update($data, array('upsert' => true));
         } else {
             $user = new FbUser();
             $user->fbId = $fbData['id'];
             $user->email = $fbData['email'];
             $user->name = $fbData['name'];
             $user->access_token = $actoken;
             $user->save();
         }
     } catch (FacebookQueryBuilderException $e) {
         return Redirect::to('/login')->with('error', $e->getPrevious()->getMessage());
     }
     // echo $token;
     // exit;
     // Log the user into Laravel
     // Facebook::auth()->login($user);
     $href = '/register';
     return '<script>window.opener.location.href="' . $href . '";self.close();</script>';
 }