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


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

У кого-нибудь есть какие-нибудь идеи по этому поводу?

Author: Community, 2015-06-02

3 answers

В файле 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

 39
Author: Digitlimit, 2016-08-27 16:07:26

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

В Приложение\Http\Контроллеры\Аутентификация добавить новый контроллер 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.com с URL, предоставленным ngrok чем-то вроде https://8b0215bc.ngrok.io.

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

 1
Author: chebaby, 2018-07-26 11:44:03

Создайте поставщика под вашим 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');
 0
Author: Khan Shahrukh, 2015-06-02 08:21:01