oauthToken('microsoft'); if ($microsoftToken) { $accessToken = $microsoftToken->access_token; $refreshToken = $microsoftToken->refresh_token; $tokenType = $microsoftToken->token_type; $scopes = $microsoftToken->scopes; $expiresAt = $microsoftToken->expires_at; } else { $accessToken = $code; $refreshToken = 'keka-placeholder-refresh'; $tokenType = 'Bearer'; $scopes = 'openid profile email'; $expiresAt = now()->addHour(); } OauthToken::updateOrCreate( [ 'user_id' => $user->id, 'provider' => 'keka', ], [ 'access_token' => $accessToken, 'refresh_token' => $refreshToken, 'token_type' => $tokenType, 'scopes' => $scopes, 'expires_at' => $expiresAt, ] ); } public function revoke(User $user): void { $user->oauthToken('keka')?->delete(); } }