Вход в Facebook с использованием Socialite в Laravel - PullRequest
0 голосов
/ 28 января 2019

Следовал процедуре для Facebook Oauth с использованием social lite в laravel

https://itsolutionstuff.com/post/laravel-56-login-with-facebook-with-socialiteexample.html

, но после того, как я его настроил, у меня возникла проблема, например ERR_TOO_MANY_REDIRECTS.

Этоссылка, по которой он перенаправляет меня:

https://www.facebook.com/v3.0/dialog/oauth?client_id=xxxxxxxxxxxx&redirect_uri=http%3A%2F%2Flocalhost%2Ffesbok%2Fpublic%2Fauth%2Ffacebook%2Fcallback&scope=email&response_type=code&state=0R4djYkaHGFEHcXF8CDZQEC52TGvzA82jr77PPp5#=

В чем может быть проблема?Я считаю, следовал всему.Пожалуйста, дайте мне знать, что я пропустил.

1 Ответ

0 голосов
/ 28 января 2019

это код, который я использую для стороннего проекта в PROD.До сих пор работает без каких-либо проблем.

Я надеюсь, что это поможет вам сделать эту сложную вещь: D, как вы можете видеть, это проще, чем кажется.

Ошибка может заключаться в том, что вы настраиваете свои маршруты для обработки аутентификации и обратного вызова, для меня кажется, что у вас есть один и тот же маршрут для обоих и таким образом, когда Facebook одобряет и отправляет пользователя обратноваш веб-сайт снова перенаправляется на конечную точку OAuth и т. д.

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Response;
use Laravel\Socialite\Facades\Socialite;

class LoginController extends Controller
{
    /**
     * Redirect the user to the GitHub authentication page.
     *
     * @param $provider
     * @return Response
     */
    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();
    }

    /**
     * Obtain the user information from GitHub.
     *
     * @param $provider
     * @return Response
     */
    public function handleProviderCallback($provider)
    {
        $user = Socialite::driver($provider)->user();

        $authUser = $this->findOrCreateUser($user, $provider);

        auth()->login($authUser, true);

        return redirect('/home');
    }

    /**
     * Finds or creates an user.
     *
     * @param $user
     * @param $provider
     * @return mixed
     */
    public function findOrCreateUser($user, $provider)
    {
        $authUser = User::where('provider_id', $user->id)->first();
        if ($authUser) {
            return $authUser;
        }

        return User::create([
          'name'     => $user->name,
          'email'    => $user->email,
          'provider' => $provider,
          'provider_id' => $user->id,
      ]);
    }
}

И вот как мы настраиваем наши службы ( вместо env, вы также можете использовать функцию маршрута ).

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Third Party Services
    |--------------------------------------------------------------------------
    |
    | This file is for storing the credentials for third party services such
    | as Stripe, Mailgun, SparkPost and others. This file provides a sane
    | default location for this type of information, allowing packages
    | to have a conventional place to find your various credentials.
    |
    */

    'twitter' => [
       'client_id' => env('TWITTER_CLIENT_ID', ''),
       'client_secret' => env('TWITTER_CLIENT_SECRET', ''),
       'redirect' => env('APP_URL', '').'/auth/twitter/callback',
      ],

    'facebook' => [
       'client_id' => env('FACEBOOK_CLIENT_ID', ''),
       'client_secret' => env('FACEBOOK_CLIENT_SECRET', ''),
       'redirect' => env('APP_URL', '').'/auth/facebook/callback',
      ],

    'google' => [
       'client_id' => env('GOOGLE_CLIENT_ID', ''),
       'client_secret' => env('GOOGLE_CLIENT_SECRET', ''),
       'redirect' => env('APP_URL', '').'/auth/google/callback',
      ],
];
//Routes for socialite
Route::get('auth/{provider}', 'LoginController@redirectToProvider');
Route::get('auth/{provider}/callback', 'LoginController@handleProviderCallback');
...