AuthSignMiddleWare.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace app\api\middleware;
  3. use app\Request;
  4. use interfaces\MiddlewareInterface;
  5. use think\cache\driver\Redis;
  6. use think\facade\Config;
  7. use think\Response;
  8. class AuthSignMiddleWare implements MiddlewareInterface
  9. {
  10. /*
  11. * 允许跨域的域名
  12. */
  13. protected $cookieDomain;
  14. public function handle(Request $request, \Closure $next)
  15. {
  16. $this->cookieDomain = Config::get('cookie.domain', '');
  17. $header = Config::get('cookie.header');
  18. $origin = $request->header('origin');
  19. if ($origin && ('' == $this->cookieDomain || strpos($origin, $this->cookieDomain)))
  20. $header['Access-Control-Allow-Origin'] = $origin;
  21. if ($request->method(true) == 'OPTIONS') {
  22. $response = Response::create('ok')->code(200)->header($header);
  23. }
  24. if (env('APP.WEB_IS_UPDATE')){
  25. $testIp = env('APP.TEST_IPS');
  26. $testIps = $testIp? $testIp : '';
  27. $currentIp = get_client_ip();
  28. if($testIps && !preg_match("/{$currentIp}/", $testIps)){
  29. return api_error_return(['msg'=>'网站正在升级中', 'data'=>['ips'=> $testIps,'ip'=> $currentIp]]);
  30. }
  31. }
  32. $redis = new Redis();
  33. if ($redis->get('is_update_data')){
  34. return api_error_return(['msg'=>'更新数据中,请稍后几秒', 'data'=>null]);
  35. }
  36. if (env('API.IS_PUBLIC_REQUEST_VERIFY')){
  37. if (ISNOTREQUESTPASS($request->param())){
  38. return api_error_return(['msg'=>'参数错误', 'data'=>null]);
  39. }
  40. }
  41. if (env('API.IS_SIGN_VERIFY')){
  42. if (empty($request->param('sign'))){
  43. return api_error_return(['msg'=>'签名不存在', 'data'=>null]);
  44. }
  45. $sign = createApiSign($request->param());
  46. if ($request->param('sign') != $sign){
  47. // return api_error_return(['msg'=>'签名错误', 'data'=>['aa'=>AESjiemi($request->password)]]);
  48. return api_error_return(['msg'=>'签名错误', 'data'=>['aa'=>$sign]]);
  49. // return api_error_return(['msg'=>'签名错误', 'data'=>null]);
  50. }
  51. if (time() - $request->post('timestamp') > 20){
  52. return api_error_return(['msg'=>'请求失败,稍后再试', 'data'=>null]);
  53. }
  54. }
  55. return $next($request);
  56. }
  57. }