[英]Laravel login with Socialite (google, facebook, etc) and create an access token of my own app
我正在將Laravel Social Authentication與Socialite一起使用,我可以成功登錄,但是我想創建自己的應用程序的訪問令牌,但不能創建google,twitter和facebook令牌。
我可以創建訪問令牌,但是每次用戶使用Socialite登錄時都會創建訪問令牌。 我要的是在用戶首次使用Socialite登錄時將創建令牌。 此外,創建令牌時會丟失“ user_id”。
這是我的loginController
public function handleProviderCallback($provider)
{
try {
$user = Socialite::driver($provider)->stateless()->user();
} catch (Exception $e) {
return redirect('/login');
}
$authUser = $this->findOrCreateUser($user, $provider);
Auth::login($authUser,false);
$user = User::find($authUser['user_id']);
return $this->getBearerTokenByUser($user, 3, true);
// return redirect($this->redirectTo);
return $user;
}
public function findOrCreateUser($providerUser, $provider)
{
$account = SocialProvider::whereProviderName($provider)
->whereProviderId($providerUser->getId())
->first();
if ($account) {
return $account->user;
} else {
$user = User::whereEmail($providerUser->getEmail())->first();
if (! $user) {
$user = User::firstOrCreate([
'email' => $providerUser->getEmail(),
'first_name' => $providerUser->getName(),
]);
}
$user->socialProviders()->create([
'provider_id' => $providerUser->getId(),
'provider_name' => $provider,
]);
return $user;
}
這是數據庫數據表“ oauth_access_tokens” 表“ users_key”
缺少user_id,並且為同一個人創建了兩次令牌(使用google登錄)。
用戶沒有密碼,因為它已通過Socialite進行身份驗證。
你可能想做些類似的事情
// Retrieve user by email, or create it with the email and first_name attributes...
User::firstOrCreate(
['email' => $providerUser->getEmail()],
['first_name' => $providerUser->getName()]
]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.