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']); }
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']); }