Светская без гражданства - PullRequest
       24

Светская без гражданства

0 голосов
/ 06 сентября 2018

У меня есть внешний SPA, построенный на Angular 6, и внутренний на Laravel 5.6. Я пытаюсь сделать авторизацию на Facebook, используя ngx-social-login на интерфейсе и Socialite на сервере.

Это код в моем компоненте

signInWithFacebook(): void {
  this.sas.signIn(FacebookLoginProvider.PROVIDER_ID).then(
    userData => this.as.fb(userData.authToken).subscribe(x => {
      console.log(x);
    })
  );
}

А это услуга

fb(data): Observable<any> {
  return this.http.get(this.API_URL, data);
}

А вот и мои маршруты Laravel

$api->version('v1', function ($api) {
    $api->get('auth/facebook', 'SocialAuthFacebookController@redirectToProvider');
    $api->get('auth/facebook/callback', 'SocialAuthFacebookController@callback');
});

Это контроллер

public function redirectToProvider()
    {
        return Socialite::driver('facebook')->stateless()->redirect();
    }

    public function callback()
    {
        $user = Socialite::driver('facebook')->stateless()->user();

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

        $token = JWTAuth::fromUser($authUser);

        return Response::json(compact('token'));
    }

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

Поскольку я использую Laravel только для API, поэтому я полагаю, что не могу получить доступ к redirectToProvider, поэтому я попытался вызвать auth/facebook/callback и передать ему authToken, который я получаю после входа в систему на моем SPA. Однако, это не похоже на работу.

У меня следующая ошибка enter image description here

Благодаря Facebook так много информации, что я не знаю, что с ней не так и что с этим делать.

1 Ответ

0 голосов
/ 16 июля 2019

Вот пример, который может помочь:


    /**
     * Redirect the user to the Facebook authentication page.
     *
     * @return Response
     */
    public function redirectToProvider()
    {
        return Socialite::driver('facebook')->stateless()->redirect();
    }

    /**
     * Obtain the user information from Facebook.
     *
     * @return JsonResponse
     */
    public function handleProviderCallback()
    {
        $providerUser = Socialite::driver('facebook')->stateless()->user();

        $user = User::query()->firstOrNew(['email' => $providerUser->getEmail()]);

        if (!$user->exists) {
            $user->name = $providerUser->getName();
            $user->save(); 
        }

        $token = JWTAuth::fromUser($user);

        return new JsonResponse([
            'token' => $token
        ]);
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...