providers = $providers; $this->session = $session; $this->request = $request; $this->stateGenerator = $stateGenerator; } public function registerProvider($alias, Provider $provider) { $this->providers->registerProvider($alias, $provider); } public function authorize($providerAlias) { $state = $this->stateGenerator->generate(); \Session::put('oauth.state', $state); \Session::save(); return $this->getProvider($providerAlias)->authorizeUrl($state); } public function getUser($providerAlias) { $this->verifyState(); return $this->getProvider($providerAlias)->getUser(); } protected function getProvider($providerAlias) { return $this->providers->getProvider($providerAlias); } protected function verifyState() { if (\Session::get('oauth.state') !== $this->request->state()) { throw new InvalidAuthorizationCodeException("State failed to verify"); } } }