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(); // this is for some reason needed, plain put doesn't work across the redirect \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; } } }