Php 无法使用带有流明的Laravel/Socialite
我尝试在(5.1)中的系统中使用该包 我在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
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。希望能有所帮助哇,回答得很好。谢谢所以,用户们,也请阅读我的答案