我在使用passport
的Laravel 5.8 API应用程序中难以通过Facebook和google验证用户身份。为了实现社交登录,我做了以下工作
1.将包添加到应用项目的依赖项composer require laravel/socialite
在配置services.php
在web.php
中添加了处理重定向到提供者和回调的路由
Route::get('/auth/{provider}', 'AuthController@redirectToProvider');
Route::get('/auth/{provider}/callback', 'AuthController@handleProviderCallback');
AuthController
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
public function handleProviderCallback($provider)
{
// store provider callback in a variable
$socialUser = Socialite::driver($provider)->stateless()->user();
// check if user exist in social account table
$socialAccount = SocialAccount::where('provider_id', $socialUser->id)->where('provider_name', $provider)->first();
// return user if account exist else create new user
if ($socialAccount) {
return response()->json(['token' => $socialUser->token, 'user' => (new UserResource($socialAccount->user))]);
} else {
$user = User::create([
'firstname' => $socialUser->name,
'lastname' => $socialUser->name,
'username' => $socialUser->email
]);
if ($user) {
SocialAccount::create([
'provider_id' => $socialUser->id,
'provider_name' => $provider,
'user_id' => $user->id
]);
}
return response()->json(['token' => $socialUser->token, 'user' => new UserResource($user)]);
}
}
测试两个登录都会返回预期的数据,并在users
表中创建用户,同时按预期将提供者信息存储在socialaccounts
中。
真正的问题是,当我通过从提供商那里传入令牌来在邮递员中运行测试时,应用程序发出401 unauthorised
的尖叫声。我想要的是在社交登录成功后对用户进行身份验证。我如何实现我的目标?
答案 0 :(得分:0)
创建或返回现有用户后,您应该调用\Auth::login($user)
来验证该用户。