【问题标题】:Unable to use Laravel / Socialite with Lumen无法将 Laravel / Socialite 与 Lumen 一起使用
【发布时间】:2016-06-02 20:53:23
【问题描述】:

我尝试在Lumen (5.1) 的系统中使用包Laravel\Socialite

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

<?php
//Socialite
'facebook' => [
    'client_id'     => '##################',
    'client_secret' => '##################',
    'redirect'      => 'http://local.dev/admin/facebook/callback',
],

bootstrap\app.php 文件中:

class_alias(Laravel\Socialite\Facades\Socialite::class, 'Socialite');
$app->register(Laravel\Socialite\SocialiteServiceProvider::class);

然后我为 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();
  }
}

routes.php

$app->get('/admin/facebook/login', 'App\Http\Controllers\Facebook\FacebookController@redirectToProviderAdmin');
$app->get('/admin/facebook/callback', 'App\Http\Controllers\Facebook\FacebookController@handleProviderCallbackAdmin');

我只是按照文档进行操作,根据我的需要进行更改。当我转到页面http://local.dev/admin/facebook/login 时,出现以下错误:

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

确实,根据代码,driver function 必须是实例化的。

EDIT:如果我尝试实例化这个类,我会收到以下错误:

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

你如何使这个模块工作?

【问题讨论】:

    标签: php facebook laravel oauth lumen


    【解决方案1】:

    这就是我的情况

    在 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');
    

    这里是 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();
    
      }
    

    我的脸书应用

    giga.com:8000 是我的本地主机(所以它是相同的本地主机:8000)

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

    http://your-domain-name.com:8000/callback
    

    如果你在本地主机上工作,你应该在 config/services.php 中命名你的域 我的看起来像这样

    'domain' => "your-domain.com",
    

    一切都运行这些命令

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

    重新启动服务器,清除浏览器 cookie。希望对你有帮助

    【讨论】:

    • 哇,很好的答案。谢谢。 SO用户,也请阅读我的答案
    猜你喜欢
    • 2016-06-28
    • 2019-03-30
    • 2018-01-02
    • 2017-09-30
    • 2016-07-14
    • 2021-09-06
    • 2016-11-15
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多