/** * @param Request $request * @return \Illuminate\Http\RedirectResponse|\Laravel\Lumen\Http\Redirector */ public function callback(Request $request) { $state = $request->get('state'); $sessionState = Session::get('google.oauth2state'); $code = $request->get('code'); if ($request->get('error')) { $request->session()->flash('error', 'auth.error'); return redirect(route('auth.loginForm')); } if (empty($state) || $state !== $sessionState) { Session::forget('google.oauth2state'); $request->session()->flash('error', 'auth.error'); return redirect(route('auth.loginForm')); } $token = $this->provider->getAccessToken('authorization_code', ['code' => $code]); try { /** @var GoogleUser $ownerDetails */ $ownerDetails = $this->provider->getResourceOwner($token); $email = $ownerDetails->getEmail(); // if we already have the email in DB we log the user if (!$this->repository->exists(['email' => $email])) { $lastName = $ownerDetails->getLastName(); $firstName = $ownerDetails->getFirstName(); $this->createUser($firstName, $lastName, $email); } // we try to logged in the user with the email and the google oauth access token Input::merge(['client_id' => Config::get('oauth2.web_client.client_id')]); Input::merge(['client_secret' => Config::get('oauth2.web_client.client_secret')]); Input::merge(['grant_type' => 'google']); Input::merge(['username' => $email]); Input::merge(['password' => $token->getToken()]); try { Authorizer::issueAccessToken(); return redirect('/'); } catch (\Exception $e) { $request->session()->flash('error', 'auth.login_error'); return redirect(route('auth.loginForm')); } } catch (ModelNotValid $e) { $request->session()->flash('error', 'auth.error'); Log::warn($e->getMessage()); return redirect(route('auth.loginForm')); } catch (\Exception $e) { $request->session()->flash('error', 'auth.error'); Log::warn($e->getMessage()); return redirect(route('auth.loginForm')); } }
public function authenticateGoogle(Request $request) { # Get access token from request #$accessToken = new AccessToken(array('access_token' => $request->input('access_token'))); $accessToken = new AccessToken(array('access_token' => 'ya29.3gFWZcLeCgaKJ-rmDE7znkTtuTA1p-7Fv4PgP4EFSn8gc10pG_jotwIDraqvsq9_jGiO')); # Create a new provider which takes values from config file $provider = new Google(['clientId' => config('easyauth.google.clientId'), 'clientSecret' => config('easyauth.google.clientSecret'), 'redirectUri' => config('easyauth.google.redirectUri'), 'scopes' => config('easyauth.google.scopes')]); try { # We got an access token, let's now get the owner details $ownerDetails = $provider->getResourceOwner($accessToken); $profile = array('provider_key' => $ownerDetails->getId(), 'first_name' => $ownerDetails->getFirstName(), 'last_name' => $ownerDetails->getLastName(), 'email' => $ownerDetails->getEmail(), 'avatar' => $ownerDetails->getAvatar(), 'provider' => 'Google+'); # Use these details to create a new profile or return a token in case the user exists return $this->authenticateOrCreateUser($profile); } catch (Exception $e) { # Failed to get user details exit('Something went wrong: ' . $e->getMessage()); } }