Php 无法使用带有流明的Laravel/Socialite

Php 无法使用带有流明的Laravel/Socialite,php,facebook,laravel,oauth,lumen,Php,Facebook,Laravel,Oauth,Lumen,我尝试在(5.1)中的系统中使用该包 我在config\services.php文件中添加了这个: <?php //Socialite 'facebook' => [ 'client_id' => '##################', 'client_secret' => '##################', 'redirect' => 'http://local.dev/admin/facebook/callb

我尝试在(5.1)中的系统中使用该包

我在
config\services.php
文件中添加了这个:

<?php
//Socialite
'facebook' => [
    'client_id'     => '##################',
    'client_secret' => '##################',
    'redirect'      => 'http://local.dev/admin/facebook/callback',
],
class_alias(Laravel\Socialite\Facades\Socialite::class, 'Socialite');
$app->register(Laravel\Socialite\SocialiteServiceProvider::class);
protected function createFacebookDriver()
{
    dd($config = $this->app['config']['services']);

    return $this->buildProvider(
        'Laravel\Socialite\Two\FacebookProvider', $config
    );
}
然后我为facebook身份验证创建了一个控制器:

<?php

namespace App\Http\Controllers\Facebook;

use App\Http\Controllers\Controller;
use Laravel\Socialite\Contracts\Factory as Socialite;

class FacebookController extends Controller
{
  public function redirectToProviderAdmin()
  {
    return Socialite::driver('facebook')->scopes(['manage_pages', 'publish_actions'])->redirect();
  }

  public function handleProviderCallbackAdmin()
  {
    $user = Socialite::driver('facebook')->user();
  }
}
我只是按照文档进行操作,根据需要进行更改。当我进入页面
http://local.dev/admin/facebook/login
,我得到以下错误:

假设$this来自不兼容的上下文,则无法静态调用非静态方法Laravel\Socialite\Contracts\Factory::driver()

事实上,根据代码,必须是实例化的

编辑:如果尝试实例化该类,则会出现以下错误:

无法实例化接口Laravel\Socialite\Contracts\Factory


如何使此模块工作?

我找到了此错误的原因。干脆不写

use Laravel\Socialite\Contracts\Factory as Socialite;
但是

然后,我又开始担心了。我仍然认为我的答案只与内腔有关,因为文档是为拉维制作的

他们告诉我们创建一个
config\services.php
文件并输入应用程序密码。不要这样做,因为此文件永远不会在任何地方调用

但是,必须在
bootstrap\app.php
文件中添加标识符,如下所示:

config(['services' => [
  'facebook' => [
    'client_id'     => '##################',
    'client_secret' => '##################',
    'redirect'      => 'http://local.dev/admin/facebook/callback',
  ],
]]);
验证:
Laravel\Socialite\SocialiteManager.php
文件中的facebook方法:

<?php
//Socialite
'facebook' => [
    'client_id'     => '##################',
    'client_secret' => '##################',
    'redirect'      => 'http://local.dev/admin/facebook/callback',
],
class_alias(Laravel\Socialite\Facades\Socialite::class, 'Socialite');
$app->register(Laravel\Socialite\SocialiteServiceProvider::class);
protected function createFacebookDriver()
{
    dd($config = $this->app['config']['services']);

    return $this->buildProvider(
        'Laravel\Socialite\Two\FacebookProvider', $config
    );
}

此代码调用
app>config>services
。因此,上述配置是正确的。经过测试,一切顺利

在我的情况下是这样的

在services.php文件中

 'facebook' => [
    'client_id' => '***************',
    'client_secret' => '***************',
    'redirect' => ""
],
我将重定向留空是因为我的站点是多语言的(所以,它稍后会用会话填充)。如果您只使用一种语言,请将回调绝对路径放在那里。比如说

"http://example.com:8000/my-callback/";
还要检查您的config/app.php。在提供程序数组中

Laravel\Socialite\SocialiteServiceProvider::class,
在别名数组中

'Socialite' => Laravel\Socialite\Facades\Socialite::class,
我的路线是这样的

Route::get('facebook', 'Auth\AuthController@redirectToProvider');
Route::get('callback', 'Auth\AuthController@handleProviderCallback');
'domain' => "your-domain.com",
下面是auth控制器方法。放在上面

use Socialite;
 //იობანი როტ
 public function redirectToProvider(Request $request)
{
    return Socialite::with('facebook')->redirect();
}

 public function handleProviderCallback(Request $request)
  {
    //here you hadle input user data
    $user = Socialite::with('facebook')->user();

  }
我的facebook应用程序

giga.com:8000是我的本地主机(因此它与localhost:8000相同)

正如您在有效的OAuth重定向URI中看到的,您应该将回调放在那里。在我的例子中,我使用三个URL,因为我有三种语言。在你的情况下,它应该是公正的

http://your-domain-name.com:8000/callback
如果您在localhost上工作,那么应该在config/services.php中命名您的域 我的看起来像这样

Route::get('facebook', 'Auth\AuthController@redirectToProvider');
Route::get('callback', 'Auth\AuthController@handleProviderCallback');
'domain' => "your-domain.com",
一切结束后,运行这些命令

php artisan cache:clear
php artisan view:clear
composer dump-autoload

重新启动服务器,清除浏览器cookies。希望能有所帮助

哇,回答得很好。谢谢所以,用户们,也请阅读我的答案