public function signin()
 {
     $wantsJson = Request::wantsJson();
     $creds = GoogleSessionController::getCreds();
     $client = GoogleSessionController::getClient();
     $code = Input::get('code');
     if ($code) {
         // Exchange the OAuth 2.0 authorization code for user credentials.
         $client->authenticate($code);
         $token = json_decode($client->getAccessToken());
         $attributes = $client->verifyIdToken($token->id_token, $creds->client_id)->getAttributes();
         $oauth2 = new Google_Service_Oauth2($client);
         $google_user = $oauth2->userinfo->get();
         $email = $google_user->email;
         $username = explode("@", $email)[0];
         if ($google_user) {
             $u = User::findFromEmail($email);
             if ($u != null) {
                 if (empty($u->google_token)) {
                     $u->google_token = json_encode($token);
                     $u->save();
                 }
                 Auth::login($u);
                 $back_url = URL::to('me');
                 $resp = ['notice' => 'Welcome ' . $u->username, 'back_url' => $back_url];
                 return $wantsJson ? Response::json($resp) : Redirect::to($back_url)->with(['notice' => 'Welcome ' . $u->username]);
             }
         }
         $errors = ['errors' => $email . ' is not registered with ' . Config::get('config.site_name')];
         return $wantsJson ? Response::json($errors) : Redirect::to('login')->with($errors);
     }
     return $wantsJson ? Response::json(['error' => 'Missing OAuth Code']) : Redirect::to('login')->with(['error' => 'Missing OAuth Code']);
 }
Esempio n. 2
0
 public function linkAccountCallback()
 {
     $user = Auth::user();
     $code = Input::get('code');
     if ($code && $user) {
         $wantsJson = Request::wantsJson();
         $creds = GoogleSessionController::getCreds();
         $client = GoogleSessionController::getClient();
         // Exchange the OAuth 2.0 authorization code for user credentials.
         $client->authenticate($code);
         $token = json_decode($client->getAccessToken());
         $attributes = $client->verifyIdToken($token->id_token, $creds->client_id)->getAttributes();
         $oauth2 = new \Google_Service_Oauth2($client);
         $google_user = $oauth2->userinfo->get();
         $email = $google_user->email;
         $username = explode("@", $email)[0];
         if (User::findFromEmail($google_user->email)) {
             return $wantsJson ? Response::json(['errors' => 'User already connected']) : Redirect::back()->with(['errors' => 'User already connected']);
         }
         // get google account info
         $user->google_token = json_encode($token);
         $user->google_id = $google_user->id;
         if (empty($user->firstname)) {
             $user->firstname = $google_user->givenName;
         }
         if (empty($user->lastname)) {
             $user->lastname = $google_user->familyName;
         }
         if ($user->hasDefaultProfileImage()) {
             GoogleSessionController::saveGoogleProfileImage($google_user, $user);
         }
         if ($user->save()) {
             $back_url = 'users/' . $user->username;
             Auth::login($user);
             return Redirect::to($back_url);
         } else {
             return $wantsJson ? Response::json(['errors' => $user->errors()->all()]) : Redirect::to('/')->with(['errors' => $user->errors()->all()]);
         }
         // return Response::json(['errors'=>$user->givenName]);
     }
     return $wantsJson ? Response::json(['errors' => 'An error occurred']) : Redirect::to('/')->with(['errors' => 'An error occurred']);
 }