无法通过社交登录身份验证用户

时间:2019-07-24 21:52:03

标签: php laravel laravel-5.8

我在使用passport的Laravel 5.8 API应用程序中难以通过Facebook和google验证用户身份。为了实现社交登录,我做了以下工作 1.将包添加到应用项目的依赖项composer require laravel/socialite

  1. 在配置services.php

  2. 中添加了facebook和google的配置
  3. web.php中添加了处理重定向到提供者和回调的路由

Route::get('/auth/{provider}', 'AuthController@redirectToProvider');

Route::get('/auth/{provider}/callback', 'AuthController@handleProviderCallback');
  1. 在我的AuthController
  2. 中添加了以下方法
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的尖叫声。我想要的是在社交登录成功后对用户进行身份验证。我如何实现我的目标?

1 个答案:

答案 0 :(得分:0)

创建或返回现有用户后,您应该调用\Auth::login($user)来验证该用户。