我是Laravel的新手,我正在关注http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/上的教程,通过Facebook将用户登录到我的应用程序中。但是,几乎在任何地方我都会使用Github或Twitter为Laravel提供的Socialite插件找到一个教程。
我的问题是,在关注本教程中的所有内容时,我点击了"登录Facebook"按钮,它会抛出一个"无效的参数异常"没有指定社交网站驱动程序。"。
另一个堆栈溢出问题似乎缩小了范围: https://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n
说明问题出在config / services.php
中现在,我有app_id和app_secret。但是,重定向链接似乎令人困惑,因为我无法在Facebook上找到它。我知道这是我的应用程序应该去Facebook登录的地方,但不确定它应该是什么。
有没有人对此有任何想法。
答案 0 :(得分:39)
在你的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';
}
}
}
最后将网站网址添加到您的Facebook应用中,如下所示:
答案 1 :(得分:3)
看起来/应该很简单的东西有点棘手,但是无论如何,这就是我让事情对我有用的方式。
您可以在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 。< / p>
这是在本地计算机上进行开发时对我有用的唯一方法。
答案 2 :(得分:0)
在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');