【问题标题】:Socialite stateless auth社交名媛无国籍身份验证
【发布时间】:2019-07-17 03:21:45
【问题描述】:

我有一个基于 Angular 6 的前端 SPA 和一个基于 Laravel 5.6 的后端。我正在尝试在前端使用 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,信息如此之多,以至于我不知道出了什么问题以及如何处理。

【问题讨论】:

    标签: php angular laravel facebook-authentication laravel-socialite


    【解决方案1】:

    这是一个可能有帮助的例子:

    /** * 将用户重定向到 Facebook 身份验证页面。 * * @return 响应 */ 公共函数redirectToProvider() { return Socialite::driver('facebook')->stateless()->redirect(); } /** * 从 Facebook 获取用户信息。 * * @return JsonResponse */ 公共函数handleProviderCallback() { $providerUser = Socialite::driver('facebook')->stateless()->user(); $user = User::query()->firstOrNew(['email' => $providerUser->getEmail()]); if (!$user->exists) { $user->name = $providerUser->getName(); $用户->保存(); } $token = JWTAuth::fromUser($user); 返回新的 JsonResponse([ '令牌' => $令牌 ]); }

    【讨论】:

    • 从回调方法返回令牌而不是重定向到主页等视图有什么好处?
    猜你喜欢
    • 2019-04-20
    • 2019-11-15
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多