[英]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.