62 lines
2.2 KiB
PHP
62 lines
2.2 KiB
PHP
<?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);
|
||
}
|
||
} |