tl;dr
If you need to read a given parameter state
returned by a thirdparty service, you can set Socialite to avoid this checking with the stateless
method:
Socialite::driver($provider)->stateless();
I think Socialite is already prepared to avoid this issue.
https://github.com/laravel/socialite/blob/2.0/src/Two/AbstractProvider.php#L77
/**
* Indicates if the session state should be utilized.
*
* @var bool
*/
protected $stateless = false;
https://github.com/laravel/socialite/blob/2.0/src/Two/AbstractProvider.php#L374
/**
* Indicates that the provider should operate as stateless.
*
* @return $this
*/
public function stateless()
{
$this->stateless = true;
return $this;
}
https://github.com/laravel/socialite/blob/2.0/src/Two/AbstractProvider.php#L222
/**
* Determine if the current request / session has a mismatching "state".
*
* @return bool
*/
protected function hasInvalidState()
{
if ($this->isStateless()) {
return false; // <--------
}
$state = $this->request->getSession()->pull('state');
return ! (strlen($state) > 0 && $this->request->input('state') === $state);
}
For instance, state
is very useful to pass data throught google:
Parameter: state (Any string)
Provides any state that might be useful to your
application upon receipt of the response. The Google Authorization
Server round-trips this parameter, so your application receives the
same value it sent. Possible uses include redirecting the user to the
correct resource in your site, and cross-site-request-forgery
mitigations.
ref: https://developers.google.com/identity/protocols/OAuth2UserAgent#overview