Использование Laravel Socialite для входа в facebook

Я новичок в Laravel, однако, и я следую учебнику по http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/, для входа пользователя через Facebook в мое приложение. Однако почти везде я нахожу учебник, используя Github или Twitter для плагина Socialite, предоставленного в Laravel.

моя проблема в том, что при выполнении всего в учебнике, когда я нажимаю кнопку" Войти в Facebook", он выдает " недопустимый аргумент Исключение " без водителя Socialite не было указано.".

другой вопрос переполнения стека, казалось, сузил круг вопросов: https://stackoverflow.com/questions/29673898/laravel-socialite-invalidargumentexception-in-socialitemanager-php-line-138-n

заявив, что проблема находится в config/services.в PHP

теперь у меня есть app_id и app_secret. Однако ссылка на перенаправление кажется запутанной, поскольку я не могу найти ее на Facebook. Я знаю что это где мое приложение должно пойти на Facebook для входа в систему, однако, не уверен, что это должно быть.

кто-нибудь знает об этом.

3 ответов


в свой композитор.добавить в 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


обновление 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'),
],

in .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\Контроллеры\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 и создать новое приложение (если у вас его еще нет)

и сделать sur настройки вашего приложения, как показано ниже на этом экране выстрелы:

enter image description here

enter image description here

важное замечание

если вы разрабатываете на локальном компьютере, вы должны использовать такие инструменты, как сайту ngrok, которые обеспечивают безопасную ссылку на ваш локальный.

в настройках входа в facebook изменить https://www.example.com с URL-адресом предоставлен сайту ngrok что-то вроде https://8b0215bc.ngrok.io.

это единственный способ, который работал для меня при разработке на моей локальной машине.


создайте поставщика под вашей конфигурацией / службами.файл 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');