我使用laravel 5.3在本地系统(Ubuntu-14.04 64Bit)中构建Web应用程序。我使用Socialite从社交网络登录。我配置了G +,Facebook,GitHug。我使用Chromium作为默认浏览器。最后问题是我得到了
AbstractProvider.php第200行中的InvalidStateException
频繁。我试过了
php artisan cache:clear
php artisan config:clear
composer dump-autoload
这些有助于暂时解决问题,再次引发问题。
请在这个问题上帮助我..
答案 0 :(得分:1)
我得到了那个例外,因为&#39;州&#39;没有在会话中保存。但我使用asPopup方法 - <input type="radio" name="player"/>MS Dhoni <br />
<input type="radio" name="player" />Virat Kohli<br />
<input type="radio" name="player"/> Sachin Tendulkar <br/>
所以我保存了会话 - Socialite::driver('facebook')->asPopup()->redirect();
。所以我解决了这个问题。
或尝试
$request->session()->save();
它有效
答案 1 :(得分:0)
如果AbstractProvider.php行200在用户状态不存在时触发异常,则表示无法创建用户。
如果您从提供商处获得详细信息(facebook,github),请首先检查您的代码,如果您创建了一个用户并将其退回。
如果您已经管理并登录了您的应用,并且您从用户表中删除了该用户,请记住还要从社交名表帐户表中删除该数据。
答案 2 :(得分:0)
我有同样的问题,我已经阅读了很多相关信息,这取决于您在登录请求时的URL是否具有www。在开始与否。
进入config\services.php
,如果您将重定向设置为http://sitename.tld/callback/facebook
,则当您从sitename.tld
发送登录请求时,oauth会起作用,而如果您从www.sitename.tld
尝试,则会获得异常。
我还不知道如何在开头使用和不使用www。
答案 3 :(得分:0)
我遇到了同样的问题,并通过3个步骤解决了该问题;
在顶部添加请求 使用Illuminate \ Http \ Request;
将请求对象传递给函数
公共函数handleProviderCallback(Request $ request) { 尝试{ $ user = Socialite :: driver('facebook')-> user(); } catch(Exception $ e){ 抛出新的异常; } }
清除缓存。 php artisan cache:clear
答案 4 :(得分:0)
我有同样的错误,但是我的解决方法有所不同。我在这里发布,以防其他人像我一样继续点击此帖子以寻求可能的答案。
我在Ubuntu 18.04桌面上进行开发,因为它是带有GUI的服务器。 Socialite在本地运行良好,但是当我通过git将更改推/拉到服务器时,它就退出了。
我通过记录发送给Google和来自Google的内容来运行跟踪。在Socialite有机会获取信息之前,我“ dd($ _ GET)”进行了原始转储,因此我知道存储了什么并可以使用。所有信息都在那里,但是Socialite似乎没有“看到”它。那就是我认为这是我的apache2标头配置干扰了cookie /会话数据。
我在apache2配置中设置了标头安全性。设置之一是
Header always edit Set-Cookie ^(.*) "$1;HttpOnly;Secure;SameSite=Strict"
此设置干扰了社交名流所需的Cookie信息。我从apache2标头配置中删除了该设置(通过注释掉),然后重新启动了Apache。最后,为了确定,我删除了storage / framework / session / *中的所有会话,并从浏览器中清除了它们。那对我有用。
在我开始工作之后,一个接一个地启用并测试了以下每个设置,以使框架安全地保护其可以提供的头信息:
SESSION_SECURE_COOKIE=true
在我的.env文件中
'http_only' => true,
和
'same_site' => 'lax'
(设置为“严格”似乎无效)
在我的config / session.php文件中。
现在,它又回到了测试安全性并在需要时进行调整。