I am trying to use login with facebook in laravel 5 using Socialize.
Here is my route file code.
Route::get('fb', function ($facebook = "facebook")
{
$provider = \Socialize::with($facebook);
if (Input::has('code'))
{
$user = $provider->user();
return var_dump($user);
} else {
return $provider->scopes(['public_profile','user_friends'])->redirect();
}
});
login is success and I get the code but time of get $provider->user()
I get the error.
InvalidStateException in AbstractProvider.php line 161
So after doing some digging if found that the issue for me was that my nginx configuration was wrong and the url parameters (code and state) weren't passed to the index.php file properly and this way the check between the state from the session and the state from the url was failing. I modified my nginx conf to look like this and it worked fine.
For anyone experiencing these problem, you can set the domain value in config/session.php to your domain and clear all cookies in your browser relating to your app url. you can also then run php artisan cache:clear and clear-complied
I wasn't comfortable with just commenting out code that signalled an error (as in @Dipesh Shihora's answer), so I dug a little further. I discovered that the error is caused (in my case at least) by a problem with sessions.
My dev server is set up according to the instructions given in this answer. Basically, I am "spoofing" Google by using a callback URL which looks like a publicly-accessible address.
The
InvalidStateException
problem was appearing for me because I was visiting my login page athttp://localhost/login
and redirecting to Google's login page, which then returned me tohttp://myapp.example.com/callback
. The problem is that the session key is stored in a cookie - it was originally a cookie forhttp://localhost
, but when I redirected to a different URL, the cookie (and hence the session key) was inaccessible. Thus, the sessionstate
value was non-existent after the update and the exception was thrown.The solution? Ensure that all my browsing on the dev machine was done at
http://myapp.example.com
and not athttp://localhost
.Try setting the correct values in the
'domain'
field ofconfig/session.php
and the'url'
field of theconfig/app.php
. This seems to have done the trick for me. I noted that the value insession.php
should be withouthttp://
, while the one inapp.php
should be withhttp://
.Also, I recommend you follow this guide: https://laracasts.com/series/whats-new-in-laravel-5/episodes/9. It's extremely helpful and clear.