无法使用 Laravel / Socialite with Lumen
Unable to use Laravel / Socialite with Lumen
我尝试使用包 Laravel\Socialite in my system in Lumen (5.1)
我在 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
时,出现以下错误:
Non-static method Laravel\Socialite\Contracts\Factory::driver() cannot be called statically, assuming $this from incompatible context
的确,根据代码,driver function必须实例化。
EDIT :如果我尝试实例化这个 class,我会收到以下错误:
Cannot instantiate interface 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');
这是身份验证控制器方法。放在最前面
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
如果您在本地主机上工作,您应该在 config/services 中命名您的域。php
我的看起来像这样
'domain' => "your-domain.com",
一切之后 运行 这些命令
php artisan cache:clear
php artisan view:clear
composer dump-autoload
重新启动服务器,清除浏览器 cookie。希望对你有帮助
我尝试使用包 Laravel\Socialite in my system in Lumen (5.1)
我在 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
时,出现以下错误:
Non-static method Laravel\Socialite\Contracts\Factory::driver() cannot be called statically, assuming $this from incompatible context
的确,根据代码,driver function必须实例化。
EDIT :如果我尝试实例化这个 class,我会收到以下错误:
Cannot instantiate interface 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');
这是身份验证控制器方法。放在最前面
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
如果您在本地主机上工作,您应该在 config/services 中命名您的域。php 我的看起来像这样
'domain' => "your-domain.com",
一切之后 运行 这些命令
php artisan cache:clear
php artisan view:clear
composer dump-autoload
重新启动服务器,清除浏览器 cookie。希望对你有帮助