验证授权和解绑的refreshtoken更新
This commit is contained in:
parent
a37d7ae901
commit
1f1d7b9bd1
@ -7,8 +7,6 @@ use support\Request;
|
|||||||
use support\Response;
|
use support\Response;
|
||||||
use DI\Annotation\Inject;
|
use DI\Annotation\Inject;
|
||||||
use app\model\ThirdUserAdvertiser;
|
use app\model\ThirdUserAdvertiser;
|
||||||
use app\model\ThirdUser as ThirdUserModel;
|
|
||||||
use think\facade\Db as ThinkDb;
|
|
||||||
|
|
||||||
class OAuthController
|
class OAuthController
|
||||||
{
|
{
|
||||||
@ -42,6 +40,17 @@ class OAuthController
|
|||||||
// state值验证通过,继续处理授权码
|
// state值验证通过,继续处理授权码
|
||||||
$googleOAuthService = new GoogleOAuthService();
|
$googleOAuthService = new GoogleOAuthService();
|
||||||
$tokens = $googleOAuthService->getRefreshToken($code);
|
$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);
|
return $this->successResponse($tokens);
|
||||||
}
|
}
|
||||||
@ -77,9 +86,17 @@ class OAuthController
|
|||||||
|
|
||||||
public function revokeRefreshToken(Request $request)
|
public function revokeRefreshToken(Request $request)
|
||||||
{
|
{
|
||||||
$accessToken = $request->input('token'); //access token
|
// $accessToken = $request->input('token'); //access token
|
||||||
$googleOAuthService = new GoogleOAuthService();
|
// $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);
|
$googleOAuthService->revokeToken($accessToken);
|
||||||
return $this->successResponse(['deleted' => 'success']);
|
return $this->successResponse(['deleted' => 'success']);
|
||||||
|
|
||||||
|
@ -18,13 +18,6 @@ use support\Redis;
|
|||||||
|
|
||||||
class GoogleAdsAds
|
class GoogleAdsAds
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @Inject
|
|
||||||
* @var GoogleAdsAdService
|
|
||||||
*/
|
|
||||||
|
|
||||||
private $googleAdsAdService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Inject
|
* @Inject
|
||||||
* @var GoogleOAuthService
|
* @var GoogleOAuthService
|
||||||
@ -63,7 +56,8 @@ class GoogleAdsAds
|
|||||||
{
|
{
|
||||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||||
foreach ($customers as $customerId) {
|
foreach ($customers as $customerId) {
|
||||||
$resourceName = $this->googleAdsAdService->runListAds($customerId);
|
$googleAdsAdService = new GoogleAdsAdService($customerId);
|
||||||
|
$resourceName = $googleAdsAdService->runListAds($customerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// return $this->successResponse(['ads_list' => $resourceName]);
|
// return $this->successResponse(['ads_list' => $resourceName]);
|
||||||
|
@ -19,12 +19,6 @@ use support\Redis;
|
|||||||
|
|
||||||
class GoogleAdsCampaigns
|
class GoogleAdsCampaigns
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @Inject
|
|
||||||
* @var GoogleAdsCampaignService
|
|
||||||
*/
|
|
||||||
|
|
||||||
private $googleAdsCampaignService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Inject
|
* @Inject
|
||||||
|
@ -19,12 +19,6 @@ use support\Redis;
|
|||||||
|
|
||||||
class GoogleAdsDateDatas
|
class GoogleAdsDateDatas
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @Inject
|
|
||||||
* @var GoogleAdsCampaignService
|
|
||||||
*/
|
|
||||||
|
|
||||||
private $googleAdsCampaignService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Inject
|
* @Inject
|
||||||
@ -67,7 +61,8 @@ class GoogleAdsDateDatas
|
|||||||
{
|
{
|
||||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||||
foreach ($customers as $customerId) {
|
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']);
|
// $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], $options['date']);
|
||||||
|
@ -20,13 +20,6 @@ use support\Redis;
|
|||||||
|
|
||||||
class GoogleAdsGroups
|
class GoogleAdsGroups
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @Inject
|
|
||||||
* @var GoogleAdsGroupService
|
|
||||||
*/
|
|
||||||
|
|
||||||
private $googleAdsGroupService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Inject
|
* @Inject
|
||||||
* @var GoogleOAuthService
|
* @var GoogleOAuthService
|
||||||
|
@ -18,7 +18,7 @@ class Cros implements MiddlewareInterface
|
|||||||
'Access-Control-Allow-Credentials' => 'true',
|
'Access-Control-Allow-Credentials' => 'true',
|
||||||
'Access-Control-Allow-Origin' => $request->header('origin', '*'),
|
'Access-Control-Allow-Origin' => $request->header('origin', '*'),
|
||||||
'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'),
|
'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;
|
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);
|
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)
|
public function revokeToken($accessToken)
|
||||||
{
|
{
|
||||||
@ -97,8 +112,17 @@ class GoogleOAuthService
|
|||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 在数据库中删除或标记该`refresh_token`为无效
|
// 在数据库中删除或标记该`access_token(其实是refresh_token)`为无效
|
||||||
// \App\Models\ThirdUser::where('access_token', $refreshToken)->delete();
|
// 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)
|
public function useRefreshToken($refreshToken)
|
||||||
|
@ -39,7 +39,10 @@ Route::group('/googleads', function () {
|
|||||||
Route::post('/update', [AdController::class, 'updateAdStatus']);
|
Route::post('/update', [AdController::class, 'updateAdStatus']);
|
||||||
// Route::post('/get', [AdController::class, 'getAdStatus']);
|
// Route::post('/get', [AdController::class, 'getAdStatus']);
|
||||||
});
|
});
|
||||||
});
|
})->middleware([
|
||||||
|
app\middleware\OauthCheck::class,
|
||||||
|
]);
|
||||||
|
|
||||||
Route::group('/campaign', function () {
|
Route::group('/campaign', function () {
|
||||||
Route::post('/list', [AdController::class, 'listCampaigns']);
|
Route::post('/list', [AdController::class, 'listCampaigns']);
|
||||||
Route::post('/export', [AdController::class, 'exportCampaignsToExcel']);
|
Route::post('/export', [AdController::class, 'exportCampaignsToExcel']);
|
||||||
@ -47,7 +50,9 @@ Route::group('/googleads', function () {
|
|||||||
Route::post('/update', [AdController::class, 'updateCampaignStatus']);
|
Route::post('/update', [AdController::class, 'updateCampaignStatus']);
|
||||||
// Route::post('/get', [AdController::class, 'getCampaignStatus']);
|
// Route::post('/get', [AdController::class, 'getCampaignStatus']);
|
||||||
});
|
});
|
||||||
});
|
})->middleware([
|
||||||
|
app\middleware\OauthCheck::class,
|
||||||
|
]);
|
||||||
Route::group('/adgroup', function () {
|
Route::group('/adgroup', function () {
|
||||||
Route::post('/list', [AdController::class, 'listGroups']);
|
Route::post('/list', [AdController::class, 'listGroups']);
|
||||||
Route::post('/export', [AdController::class, 'exportGroupsToExcel']);
|
Route::post('/export', [AdController::class, 'exportGroupsToExcel']);
|
||||||
@ -55,8 +60,9 @@ Route::group('/googleads', function () {
|
|||||||
Route::post('/update', [AdController::class, 'updateGroupStatus']);
|
Route::post('/update', [AdController::class, 'updateGroupStatus']);
|
||||||
// Route::post('/get', [AdController::class, 'getGroupStatus']);
|
// Route::post('/get', [AdController::class, 'getGroupStatus']);
|
||||||
});
|
});
|
||||||
});
|
})->middleware([
|
||||||
|
app\middleware\OauthCheck::class,
|
||||||
|
]);
|
||||||
|
|
||||||
Route::group('/auth', function () {
|
Route::group('/auth', function () {
|
||||||
Route::get('/code', [OAuthController::class, 'getAuthCode']);
|
Route::get('/code', [OAuthController::class, 'getAuthCode']);
|
||||||
@ -68,6 +74,7 @@ Route::group('/googleads', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
Route::group('/campaign', function () {
|
Route::group('/campaign', function () {
|
||||||
Route::post('/create', [GoogleAdsController::class, 'createCampaign']);
|
Route::post('/create', [GoogleAdsController::class, 'createCampaign']);
|
||||||
});
|
});
|
||||||
@ -122,7 +129,7 @@ Route::fallback(function (Request $request) {
|
|||||||
'Access-Control-Allow-Credentials' => 'true',
|
'Access-Control-Allow-Credentials' => 'true',
|
||||||
'Access-Control-Allow-Origin' => "*",
|
'Access-Control-Allow-Origin' => "*",
|
||||||
'Access-Control-Allow-Methods' => '*',
|
'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;
|
return $response;
|
||||||
});
|
});
|
||||||
|
@ -59,6 +59,7 @@ return [
|
|||||||
// 'schema' => 'public'// 设置默认 schema
|
// 'schema' => 'public'// 设置默认 schema
|
||||||
'debug' => true,
|
'debug' => true,
|
||||||
// 'fields_strict' => false,
|
// 'fields_strict' => false,
|
||||||
|
'fields_cache' => false,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
Loading…
Reference in New Issue
Block a user