繁体   English   中英

名媛无状态身份验证

[英]Socialite stateless auth

我有一个基于Angular 6的前端SPA和基于Laravel 5.6的后端SPA。 我正在尝试使用ngx-social-login和后端的Socialite进行Facebook身份验证。

那是我组件中的代码

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并将经过SPA登录后获得的authToken传递给它。 但是,它似乎不起作用。

我遇到下一个错误 在此处输入图片说明

多亏了Facebook,所以信息太多了,所以我不知道出了什么问题以及如何处理。

以下示例可能会有所帮助:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM