Мой ожидаемый результат — перенаправление пользователя на мою домашнюю страницу после входа в Facebook. Я использую Socialite, Laravel 5.4 и Xampp. После того, как я смог войти через Facebook, мой URL теперь находится в обратном вызове, в котором обратный вызов вызывает logincontroller, который перенаправляет на домашнюю страницу. Таким образом, проблема после перенаправления на домашнюю страницу, мой URL теперь имеет некоторое значение хэширования.
локальный / sampleProject / открытый / Логин / facebook / обратный вызов? Код = AQBZpjdW …
и когда я перезагружаю страницу, она показывает ошибку недопустимого состояния в abstractprovider.php. Я что-то упускаю в своих функциях?
Внутри моего контроллера входа
public function redirectToProvider()
{
return Socialite::driver('facebook')->redirect();
}
/**
* Obtain the user information from facebook.
*
* @return Response
*/
public function handleProviderCallback()
{
$user = Socialite::driver('facebook')->user();
return view('user-profile', compact('user',$user));
}
Внутри моего файла services.php
'facebook' => [
'client_id' => 'insert_app_id_here',
'client_secret' => 'enter_app_secret_here',
'redirect' => 'http://localhost/sampleProject/public/login/facebook/callback',
],
Внутри моих маршрутов / web.php
Route::get('login/facebook', 'Auth\LoginController@redirectToProvider');
Route::get('login/facebook/callback', 'Auth\LoginController@handleProviderCallback');
Я также включил их в мой config / app.php
Laravel\Socialite\SocialiteServiceProvider::class,
а также
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
Вы могли бы попробовать эту вещь)
public function handleProviderCallback(Request $request)
{
session()->put('state', $request->input('state'));
$user = Socialite::driver('facebook')->user();
return view('user-profile', compact('user',$user));
}
Прежде всего, запустите следующую команду:
composer require laravel/socialite
После этого в Приложение / config.php добавьте следующую строку в провайдеров.
Laravel\Socialite\SocialiteServiceProvider::class,
После этого в Приложение / config.php добавьте следующую строку в псевдонимах
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
В конфиг / 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. Я следовал за этой статьей для предложенного решения выше. https://www.cloudways.com/blog/social-login-in-laravel-using-socialite/