Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel社交名媛登录facebook_Php_Facebook_Facebook Graph Api_Laravel_Laravel Socialite - Fatal编程技术网

Php 使用Laravel社交名媛登录facebook

Php 使用Laravel社交名媛登录facebook,php,facebook,facebook-graph-api,laravel,laravel-socialite,Php,Facebook,Facebook Graph Api,Laravel,Laravel Socialite,然而,我对Laravel是新手,我正在按照教程,通过Facebook将用户登录到我的应用程序中。然而,几乎在任何地方,我都能找到一个使用Github或Twitter的教程,用于Laravel中提供的社交网站插件 我的问题是,按照教程中的所有内容,当我单击“登录到Facebook”按钮时,它会抛出一个“无效参数异常”,没有指定社交名流驱动程序。” 另一个堆栈溢出问题似乎缩小了范围: 说明问题在config/services.php中 现在,我有了app_id和app_secret。但是,重定向链

然而,我对Laravel是新手,我正在按照教程,通过Facebook将用户登录到我的应用程序中。然而,几乎在任何地方,我都能找到一个使用Github或Twitter的教程,用于Laravel中提供的社交网站插件

我的问题是,按照教程中的所有内容,当我单击“登录到Facebook”按钮时,它会抛出一个“无效参数异常”,没有指定社交名流驱动程序。”

另一个堆栈溢出问题似乎缩小了范围:

说明问题在config/services.php中

现在,我有了app_id和app_secret。但是,重定向链接似乎令人困惑,因为我在Facebook上也找不到它。我知道这是我的应用程序应该登录到Facebook的地方,但不确定它应该是什么


有人对此有任何想法。

在你的composer.json中添加-
“laravel/socialite”:“~2.0”,

运行
composer更新

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';
          }
       }

 }

在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');
2018年更新-laravel 5.6-社交名流3.0 对于看起来/应该很简单的事情来说,这有点棘手,但无论如何,这就是我如何让事情为我工作的方式

服务器端 您可以在中找到这些说明和更多详细信息

装置 配置 在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
路由/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');
        }
    }
}

如何创建facebook作为获取客户id和cilent\u机密的提供商?@yudijohn,关于你的问题,你应该在facebook中创建一个应用程序。无论如何,这是你应该作为一个新问题发布的。如果你已经在
配置/服务
中为该重定向设置了重定向,你能解释一下第二条路线会做什么吗在您的服务中,您必须创建一个将被调用的路由。在Facebook上进行身份验证后,它会重定向到回调URL,因此如果该路由不存在,您将无法找到错误注册应用程序的简单方法是在此处-如何创建Facebook作为提供商以获取客户端id和cilent_机密?
Route::get('auth/facebook/', 'Auth\FacebookController@redirect')->name('auth.facebook');

Route::get('auth/facebook/callback', 'Auth\FacebookController@callback')->name('auth.facebook.callback');
<?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');
        }
    }
}