首页 文章

使用Laravel Socialite登录Facebook

提问于
浏览
15

我是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登录的地方,但不确定它应该是什么 .

有没有人对此有任何想法 .

3 回答

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

    最后将网站URL添加到您的Facebook应用中,如下所示:

    enter image description here

  • 1

    更新2018 - laravel 5.6 - socialite 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');
            }
        }
    }
    

    Facebook方面

    转到https://developers.facebook.com/apps并创建新的应用程序(如果您还没有)

    并使你的应用程序设置如下所示:

    enter image description here

    enter image description here

    重要提示

    如果您在本地计算机上进行开发,则必须使用ngrok之类的工具来提供与本地主机的安全链接 .

    在facebook登录设置中更改https://www.example.comurlngrok 提供,如 https://8b0215bc.ngrok.io .

    这是我在本地机器上进行开发时唯一有效的方法 .

  • 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');
    

相关问题