16

然而,我是 Laravel 的新手,我正在遵循http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/上的教程,通过 Facebook 将用户登录到我的应用程序中。然而,几乎在任何地方我都能找到使用 Github 或 Twitter 的 Laravel 中提供的社交名流插件的教程。

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

另一个堆栈溢出问题似乎缩小了范围: https ://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n

说明问题出在 config/services.php

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

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

4

3 回答 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 应用程序,如下所示:

在此处输入图像描述

于 2015-06-02T08:12:29.467 回答
3

2018 年更新 - laravel 5.6 - 社交名流 3.0

对于看起来/应该很容易的东西来说有点棘手,但无论如何这就是我让事情对我有用的方式。

服务器端

您可以在社交名流文档中找到这些说明和更多详细信息

安装

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

这是在我的本地机器上开发时对我有用的唯一方法。

于 2018-07-26T11:44:03.397 回答
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');
于 2015-06-02T08:21:01.597 回答