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

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

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

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

Заявить, что проблема в config / services.php

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

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

15

Решение

В вашем composer.json add- "laravel/socialite": "~2.0",

"require": {
"laravel/framework": "5.0.*",
"laravel/socialite": "~2.0",

бег composer update

В конфиг / 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 следующим образом:

введите описание изображения здесь

39

Другие решения

Это немного сложно для чего-то, что выглядит / должно быть легко, но в любом случае это то, как я заставляю вещи работать на меня.

Вы можете найти эти инструкции и более подробную информацию в светские документы

Монтаж

composer require laravel/socialite

конфигурация

в конфиг / services.php добавлять

'facebook' => [

'client_id'     => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect'      => env('FACEBOOK_CALLBACK_URL'),
],

в .окр добавление файла

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

идти к https://developers.facebook.com/apps и создайте новое приложение (если у вас его еще нет)

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

введите описание изображения здесь

введите описание изображения здесь

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

В фейсбуке настройки логина меняются https://www.example.com с URL предоставлено ngrok что-то вроде https://8b0215bc.ngrok.io.

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

2

Создайте провайдера в вашем файле 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
По вопросам рекламы [email protected]