webman_ad/app/controller/OAuthController.php
2024-12-20 18:08:48 +08:00

105 lines
3.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\controller;
use app\service\GoogleOAuthService;
use support\Request;
use support\Response;
use DI\Annotation\Inject;
class OAuthController
{
/**
* @Inject
* @var GoogleOAuthService
*/
private $googleOAuthService;
public function getAuthCode()
{
$authUrl = $this->googleOAuthService->getAuthUrl();
return $this->successResponse([
'url' => $authUrl,
]);
}
public function handleCallback(Request $request)
{
// $state = $request->input('state'); // 从Google回调中获取state
$code = $request->input('code'); // 授权码
// 验证state值是否与保存的值一致
// if ($state !== $_SESSION['oauth_state']) {
// if ($state !== '7a7a9edad5b48c127b7c14fabe39fae0') {
// return $this->errorResponse(400, 'Invalid state parameter');
// }
// state值验证通过继续处理授权码
$googleOAuthService = new GoogleOAuthService();
$tokens = $googleOAuthService->getRefreshToken($code);
return $this->successResponse($tokens);
}
public function getRefreshToken(Request $request)
{
$authCode = $request->input('code');
// $state = $request->input('state'); // 从Google回调中获取state
// 验证state值是否与保存的值一致
// if ($state !== $_SESSION['oauth_state']) {
// return $this->errorResponse(400, 'Invalid state parameter');
// }
$googleOAuthService = new GoogleOAuthService();
$tokens = $googleOAuthService->getRefreshToken($authCode);
if (!isset($tokens['refresh_token'])) {
return $this->successResponse($tokens);
}
// 保存refresh token到数据库
// $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $tokens['access_token'], $request->user_id);
$googleOAuthService->saveRefreshToken($tokens['refresh_token'], $tokens['access_token']);
return $this->successResponse($tokens);
}
public function useRefreshToken(Request $request)
{
$refreshToken = $request->input('refresh_token');
$googleOAuthService = new GoogleOAuthService();
$newAccessToken = $googleOAuthService->useRefreshToken($refreshToken);
return $this->successResponse(['access_token' => $newAccessToken]);
}
public function revokeRefreshToken(Request $request)
{
$accessToken = $request->input('token'); //access token
$googleOAuthService = new GoogleOAuthService();
$googleOAuthService->revokeToken($accessToken);
return $this->successResponse(['deleted' => 'success']);
}
// 可以加入一些公共方法
protected function successResponse($data): Response
{
return Json([
'code' => 0,
'msg' => 'ok',
'data' => $data,
]);
}
protected function errorResponse($code, $message, $data = []): Response
{
return Json([
'code' => $code,
'msg' => $message ?: 'error',
'data' => $data
]);
}
}