使用 Laravel Socialite 登录 Facebook
Posted
技术标签:
【中文标题】使用 Laravel Socialite 登录 Facebook【英文标题】:Using Laravel Socialite to login to facebook 【发布时间】:2015-08-15 21:37:27 【问题描述】:然而,我是 Laravel 的新手,我正在按照 http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/ 上的教程,通过 Facebook 将用户登录到我的应用程序中。但是,几乎在所有地方,我都能找到使用 Github 或 Twitter 的 Laravel 中提供的社交名流插件的教程。
我的问题是,按照教程中的所有内容,当我点击“登录 Facebook”按钮时,它会引发“无效参数异常”,并且没有指定社交名流驱动程序。”。
另一个堆栈溢出问题似乎缩小了范围: https://***.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n
说明问题出在 config/services.php
现在,我有了 app_id 和 app_secret。但是,重定向链接似乎令人困惑,因为我在 Facebook 上也找不到它。我知道这是我的应用程序应该去 Facebook 登录的地方,但是我不确定它应该是什么。
有人对此有任何想法吗?
【问题讨论】:
【参考方案1】:2018 年更新 - laravel 5.6 - 社交名媛 3.0
对于看起来/应该很简单的东西来说有点棘手,但无论如何这就是我让事情适合我的方式。
服务器端
您可以在socialite docs 中找到这些说明和更多详细信息
安装
composer require laravel/socialite
配置
在config/services.php添加
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CALLBACK_URL'),
],
在.env文件中添加
FACEBOOK_CLIENT_ID=paste_client_id_here
FACEBOOK_CLIENT_SECRET=paste_client_secret_here
FACEBOOK_CALLBACK_URL=https://www.example.com/auth/facebook/callback
在routes/web.php添加
Route::get('auth/facebook/', 'Auth\FacebookController@redirect')->name('auth.facebook');
Route::get('auth/facebook/callback', 'Auth\FacebookController@callback')->name('auth.facebook.callback');
在 App\Http\Controllers\Auth 中添加新控制器 FacebookController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use Socialite;
class FacebookController extends Controller
/**
* Create a new controller instance.
*
* @return void
*/
public function redirect()
return Socialite::driver('facebook')->redirect();
/**
* Create a new controller instance.
*
* @return void
*/
public function callback(Request $request)
try
$facebookAccount = Socialite::driver('facebook')->user();
// your logic here...
return redirect()->route('your.route.name');
catch (Exception $e)
return redirect()->route('auth.facebook');
脸书方面
转到https://developers.facebook.com/apps 并创建新应用(如果您还没有)
并在这些屏幕截图中使您的应用设置如下所示:
重要提示
如果您在本地计算机上进行开发,则必须使用像 ngrok 这样的工具来提供到本地主机的安全链接。
在 facebook 登录设置中,使用 ngrok 提供的 url 更改 https://www.example.com,类似于 https://8b0215bc.ngrok.io。
这是在我的本地机器上开发时对我有用的唯一方法。
【讨论】:
【参考方案2】:在您的 composer.json 添加-"laravel/socialite": "~2.0",
"require":
"laravel/framework": "5.0.*",
"laravel/socialite": "~2.0",
运行composer update
在 config/services.php 中添加:
//Socialite
'facebook' => [
'client_id' => '1234567890444',
'client_secret' => '1aa2af333336fffvvvffffvff',
'redirect' => 'http://laravel.dev/login/callback/facebook',
],
你需要创建两条路由,我的是这样的:
//Social Login
Route::get('/login/provider?',[
'uses' => 'AuthController@getSocialAuth',
'as' => 'auth.getSocialAuth'
]);
Route::get('/login/callback/provider?',[
'uses' => 'AuthController@getSocialAuthCallback',
'as' => 'auth.getSocialAuthCallback'
]);
你还需要像这样为上面的路由创建控制器:
<?php namespace App\Http\Controllers;
use Laravel\Socialite\Contracts\Factory as Socialite;
class AuthController extends Controller
public function __construct(Socialite $socialite)
$this->socialite = $socialite;
public function getSocialAuth($provider=null)
if(!config("services.$provider")) abort('404'); //just to handle providers that doesn't exist
return $this->socialite->with($provider)->redirect();
public function getSocialAuthCallback($provider=null)
if($user = $this->socialite->with($provider)->user())
dd($user);
else
return 'something went wrong';
最后像这样将站点 URL 添加到您的 Facebook 应用程序:
【讨论】:
如何创建facebook作为提供者来获取client_id和cilent_secret? @yudijohn,关于您的问题,您应该在 Facebook 中创建一个应用程序。无论如何,这是您应该作为新问题发布的内容。 如果您已经在config/services
中进行了重定向,您能解释一下第二条路由的作用吗?
要使您的服务中的重定向起作用,您必须创建一个将被调用的路由。在 Facebook 上进行身份验证后,它会重定向到回调 URL,因此如果路由不存在,您将收到 not found 错误
注册应用程序的简单方法在这里-youtube.com/watch?v=HIf0JW7JhcE【参考方案3】:
在你的 config/services.php 文件下创建一个提供者
'facebook' => [
'client_id' => 'your-fb-client-id',
'client_secret' => 'your-fb-secret',
'redirect' => 'http://your-redirect.com/route',
],
现在您可以使用以下代码创建控制器
//this function will redirect users to facebook login page
public function facebook()
return \Socialize::with('facebook')->redirect();
public function callback()
$user = \Socialize::with('facebook')->user();
//now we have user details in the $user array
dd($user);
这是你的路线
Route::get('facebook', 'LoginController@facebook');
Route::get('callback', 'LoginController@callback');
【讨论】:
如何创建facebook作为提供者来获取client_id和cilent_secret?以上是关于使用 Laravel Socialite 登录 Facebook的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 使用 Socialite(google、facebook 等)登录并创建我自己的应用程序的访问令牌
用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调
Laravel Socialite 中的 Google 登录是不是包含用户的电话号码?