验证授权和解绑的refreshtoken更新
This commit is contained in:
parent
a37d7ae901
commit
1f1d7b9bd1
@ -7,8 +7,6 @@ use support\Request;
|
||||
use support\Response;
|
||||
use DI\Annotation\Inject;
|
||||
use app\model\ThirdUserAdvertiser;
|
||||
use app\model\ThirdUser as ThirdUserModel;
|
||||
use think\facade\Db as ThinkDb;
|
||||
|
||||
class OAuthController
|
||||
{
|
||||
@ -42,6 +40,17 @@ class OAuthController
|
||||
// state值验证通过,继续处理授权码
|
||||
$googleOAuthService = new GoogleOAuthService();
|
||||
$tokens = $googleOAuthService->getRefreshToken($code);
|
||||
if (!isset($tokens['refresh_token'])) {
|
||||
return $this->errorResponse(300, 'Invalid state parameter');
|
||||
}else{
|
||||
// 保存refresh token到数据库
|
||||
$googleOAuthService->updateRefreshToken($tokens['refresh_token'], $tokens['access_token']);
|
||||
// 根据新用户绑定插入新数据todo
|
||||
// if(!$result) {
|
||||
// $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $tokens['access_token']);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
return $this->successResponse($tokens);
|
||||
}
|
||||
@ -77,9 +86,17 @@ class OAuthController
|
||||
|
||||
public function revokeRefreshToken(Request $request)
|
||||
{
|
||||
$accessToken = $request->input('token'); //access token
|
||||
$googleOAuthService = new GoogleOAuthService();
|
||||
// $accessToken = $request->input('token'); //access token
|
||||
// $customerId = isset($requestData['ad_customer_id']) ? $requestData['ad_customer_id'] : getenv('GOOGLE_ADS_CUSTOMER_ID');
|
||||
$customerId = getenv('GOOGLE_ADS_CUSTOMER_ID'); //临时指定
|
||||
// 通过 advertiser_id 查询 ThirdUserAdvertiser,联表查询 ThirdUser 数据
|
||||
$userAdvertiser = ThirdUserAdvertiser::with('googleUser') // 联表查询 user 关联
|
||||
->where('advertiser_id', $customerId) // 根据 advertiser_id 查询
|
||||
->find(); // 获取第一个结果
|
||||
// dump($userAdvertiser->googleUser->access_token);
|
||||
$accessToken = $userAdvertiser->googleUser->access_token;
|
||||
|
||||
$googleOAuthService = new GoogleOAuthService();
|
||||
$googleOAuthService->revokeToken($accessToken);
|
||||
return $this->successResponse(['deleted' => 'success']);
|
||||
|
||||
|
@ -18,13 +18,6 @@ use support\Redis;
|
||||
|
||||
class GoogleAdsAds
|
||||
{
|
||||
/**
|
||||
* @Inject
|
||||
* @var GoogleAdsAdService
|
||||
*/
|
||||
|
||||
private $googleAdsAdService;
|
||||
|
||||
/**
|
||||
* @Inject
|
||||
* @var GoogleOAuthService
|
||||
@ -63,7 +56,8 @@ class GoogleAdsAds
|
||||
{
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||
foreach ($customers as $customerId) {
|
||||
$resourceName = $this->googleAdsAdService->runListAds($customerId);
|
||||
$googleAdsAdService = new GoogleAdsAdService($customerId);
|
||||
$resourceName = $googleAdsAdService->runListAds($customerId);
|
||||
}
|
||||
|
||||
// return $this->successResponse(['ads_list' => $resourceName]);
|
||||
|
@ -19,12 +19,6 @@ use support\Redis;
|
||||
|
||||
class GoogleAdsCampaigns
|
||||
{
|
||||
/**
|
||||
* @Inject
|
||||
* @var GoogleAdsCampaignService
|
||||
*/
|
||||
|
||||
private $googleAdsCampaignService;
|
||||
|
||||
/**
|
||||
* @Inject
|
||||
|
@ -19,12 +19,6 @@ use support\Redis;
|
||||
|
||||
class GoogleAdsDateDatas
|
||||
{
|
||||
/**
|
||||
* @Inject
|
||||
* @var GoogleAdsCampaignService
|
||||
*/
|
||||
|
||||
private $googleAdsCampaignService;
|
||||
|
||||
/**
|
||||
* @Inject
|
||||
@ -67,7 +61,8 @@ class GoogleAdsDateDatas
|
||||
{
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||
foreach ($customers as $customerId) {
|
||||
$this->googleAdsCampaignService->runListDateDatas($customerId, $options['date']);
|
||||
$googleAdsCampaignService = new googleAdsCampaignService($customerId);
|
||||
$googleAdsCampaignService->runListDateDatas($customerId, $options['date']);
|
||||
}
|
||||
|
||||
// $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], $options['date']);
|
||||
|
@ -20,13 +20,6 @@ use support\Redis;
|
||||
|
||||
class GoogleAdsGroups
|
||||
{
|
||||
/**
|
||||
* @Inject
|
||||
* @var GoogleAdsGroupService
|
||||
*/
|
||||
|
||||
private $googleAdsGroupService;
|
||||
|
||||
/**
|
||||
* @Inject
|
||||
* @var GoogleOAuthService
|
||||
|
@ -18,7 +18,7 @@ class Cros implements MiddlewareInterface
|
||||
'Access-Control-Allow-Credentials' => 'true',
|
||||
'Access-Control-Allow-Origin' => $request->header('origin', '*'),
|
||||
'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'),
|
||||
'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', '*'),
|
||||
'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', 'Authorization, Content-Length, X-CSRF-Token, Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language, Keep-Alive, User-Agent, Content-Type'),
|
||||
]);
|
||||
|
||||
return $response;
|
||||
|
62
app/middleware/OauthCheck.php
Normal file
62
app/middleware/OauthCheck.php
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace app\middleware;
|
||||
|
||||
use app\model\ThirdUserAdvertiser;
|
||||
//use ReflectionClass;
|
||||
use Webman\MiddlewareInterface;
|
||||
use Webman\Http\Response;
|
||||
use Webman\Http\Request;
|
||||
|
||||
class OauthCheck implements MiddlewareInterface
|
||||
{
|
||||
public function process(Request $request, callable $handler): Response
|
||||
{
|
||||
|
||||
$requestData = $request->all(); // 获取请求数据
|
||||
$customerId = isset($requestData['ad_customer_id']) ? $requestData['ad_customer_id'] : getenv('GOOGLE_ADS_CUSTOMER_ID');
|
||||
// 通过 advertiser_id 查询 ThirdUserAdvertiser,联表查询 ThirdUser 数据
|
||||
$userAdvertiser = ThirdUserAdvertiser::with('googleUser') // 联表查询 user 关联
|
||||
->where('advertiser_id', $customerId) // 根据 advertiser_id 查询
|
||||
->find(); // 获取第一个结果
|
||||
// 如果找到广告主数据
|
||||
if ($userAdvertiser && $userAdvertiser->googleUser) {
|
||||
// 获取关联用户的 access_token
|
||||
$accessToken = $userAdvertiser->googleUser->access_token;
|
||||
if (empty($accessToken)) {
|
||||
return Json([
|
||||
'code' => 300,
|
||||
'msg' => 'AccessToken 为空或过期',
|
||||
'data' => []
|
||||
]);
|
||||
}
|
||||
$request->login_customer_id = $customerId;
|
||||
$request->access_token = $accessToken;
|
||||
} else {
|
||||
return Json([
|
||||
'code' => 300,
|
||||
'msg' => '未找到该广告主或关联的用户',
|
||||
'data' => []
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
// if (session('user')) {
|
||||
// // 已经登录,请求继续向洋葱芯穿越
|
||||
// return $handler($request);
|
||||
// }
|
||||
|
||||
// 通过反射获取控制器哪些方法不需要登录
|
||||
// $controller = new ReflectionClass($request->controller);
|
||||
// $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? [];
|
||||
|
||||
// 访问的方法需要登录
|
||||
// if (!in_array($request->action, $noNeedLogin)) {
|
||||
// // 拦截请求,返回一个重定向响应,请求停止向洋葱芯穿越
|
||||
// return redirect('/user/login');
|
||||
// }
|
||||
|
||||
// 不需要登录,请求继续向洋葱芯穿越
|
||||
return $handler($request);
|
||||
}
|
||||
}
|
@ -87,6 +87,21 @@ class GoogleOAuthService
|
||||
ThinkDb::execute($sql, $data);
|
||||
}
|
||||
|
||||
public function updateRefreshToken($refreshToken)
|
||||
{
|
||||
$customer_id = getenv('GOOGLE_ADS_CUSTOMER_ID');
|
||||
//暂时update进行绑定
|
||||
$tableName = "bps.bps_third_user";
|
||||
// $sql = "UPDATE {$tableName} SET access_token = :access_token WHERE random_code = :random_code";
|
||||
$sql = "UPDATE {$tableName} SET access_token = :access_token WHERE user_id = :user_id";
|
||||
$data = [
|
||||
'access_token' => $refreshToken, // 这里的 $accessToken 是您想要匹配的值
|
||||
'user_id' => $customer_id, // 这里的 $accessToken 是您想要匹配的值
|
||||
];
|
||||
// 执行 SQL 语句
|
||||
$result = ThinkDb::execute($sql, $data);
|
||||
}
|
||||
|
||||
|
||||
public function revokeToken($accessToken)
|
||||
{
|
||||
@ -97,8 +112,17 @@ class GoogleOAuthService
|
||||
],
|
||||
]);
|
||||
|
||||
// 在数据库中删除或标记该`refresh_token`为无效
|
||||
// \App\Models\ThirdUser::where('access_token', $refreshToken)->delete();
|
||||
// 在数据库中删除或标记该`access_token(其实是refresh_token)`为无效
|
||||
// ThirdUserModel::where('access_token', $accessToken)->delete();
|
||||
$tableName = "bps.bps_third_user";
|
||||
$sql = "UPDATE {$tableName} SET access_token = '' WHERE access_token = :access_token";
|
||||
|
||||
$data = [
|
||||
'access_token' => $accessToken // 这里的 $accessToken 是您想要匹配的值
|
||||
];
|
||||
|
||||
// 执行 SQL 语句
|
||||
ThinkDb::execute($sql, $data);
|
||||
}
|
||||
|
||||
public function useRefreshToken($refreshToken)
|
||||
|
@ -39,7 +39,10 @@ Route::group('/googleads', function () {
|
||||
Route::post('/update', [AdController::class, 'updateAdStatus']);
|
||||
// Route::post('/get', [AdController::class, 'getAdStatus']);
|
||||
});
|
||||
});
|
||||
})->middleware([
|
||||
app\middleware\OauthCheck::class,
|
||||
]);
|
||||
|
||||
Route::group('/campaign', function () {
|
||||
Route::post('/list', [AdController::class, 'listCampaigns']);
|
||||
Route::post('/export', [AdController::class, 'exportCampaignsToExcel']);
|
||||
@ -47,7 +50,9 @@ Route::group('/googleads', function () {
|
||||
Route::post('/update', [AdController::class, 'updateCampaignStatus']);
|
||||
// Route::post('/get', [AdController::class, 'getCampaignStatus']);
|
||||
});
|
||||
});
|
||||
})->middleware([
|
||||
app\middleware\OauthCheck::class,
|
||||
]);
|
||||
Route::group('/adgroup', function () {
|
||||
Route::post('/list', [AdController::class, 'listGroups']);
|
||||
Route::post('/export', [AdController::class, 'exportGroupsToExcel']);
|
||||
@ -55,8 +60,9 @@ Route::group('/googleads', function () {
|
||||
Route::post('/update', [AdController::class, 'updateGroupStatus']);
|
||||
// Route::post('/get', [AdController::class, 'getGroupStatus']);
|
||||
});
|
||||
});
|
||||
|
||||
})->middleware([
|
||||
app\middleware\OauthCheck::class,
|
||||
]);
|
||||
|
||||
Route::group('/auth', function () {
|
||||
Route::get('/code', [OAuthController::class, 'getAuthCode']);
|
||||
@ -68,6 +74,7 @@ Route::group('/googleads', function () {
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Route::group('/campaign', function () {
|
||||
Route::post('/create', [GoogleAdsController::class, 'createCampaign']);
|
||||
});
|
||||
@ -122,7 +129,7 @@ Route::fallback(function (Request $request) {
|
||||
'Access-Control-Allow-Credentials' => 'true',
|
||||
'Access-Control-Allow-Origin' => "*",
|
||||
'Access-Control-Allow-Methods' => '*',
|
||||
'Access-Control-Allow-Headers' => '*',
|
||||
'Access-Control-Allow-Headers' => 'Authorization, Content-Length, X-CSRF-Token, Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language, Keep-Alive, User-Agent, Content-Type',
|
||||
]);
|
||||
return $response;
|
||||
});
|
||||
|
@ -59,6 +59,7 @@ return [
|
||||
// 'schema' => 'public'// 设置默认 schema
|
||||
'debug' => true,
|
||||
// 'fields_strict' => false,
|
||||
'fields_cache' => false,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
Loading…
Reference in New Issue
Block a user