簡體   English   中英

無法與流明一起使用Laravel / Socialite

[英]Unable to use Laravel / Socialite with 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來自不兼容的上下文

確實,根據代碼, 驅動程序功能必須實例化。

編輯 :如果我嘗試實例化此類,則會出現以下錯誤:

無法實例化界面Laravel \\ Socialite \\ Contracts \\ Factory

您如何使該模塊正常工作?

這就是我的情況

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

  }

我的Facebook應用程序 fb_settings

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

fb_settings2

fb_settings3

正如您在有效OAuth重定向URI中看到的那樣,您應該在其中放置回調。 在我的情況下,我使用三個網址,因為我有三種語言。 在你的情況下應該只是

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

如果您在localhost上工作,則應在config / services.php中命名您的域,如下所示

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

一切運行完這些命令后

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

重新啟動服務器,清除瀏覽器cookie。 希望能幫助到你

我找到了此錯誤的原因。 根本不寫

use Laravel\Socialite\Contracts\Factory as Socialite;

use Socialite;

然后,我再次陷入了擔憂。 我仍然准確地說,我的答案僅與Lumen有關 ,因為該文檔是為Laravel創建的。

他們告訴我們創建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方法:

protected function createFacebookDriver()
{
    dd($config = $this->app['config']['services']);

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

此代碼調用app > config > services 所以上面的配置是正確的。 經過測試,一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM