ThinkPHP6 跨域开起后某些接口请求报错跨域
AI摘要 ThinkPHP6部署后部分接口出现跨域报错，经排查发现是路由与控制器命名不规范所致。通过将驼峰式命名改为简洁的单个单词命名，可有效解决该跨域问题。建议开发时保持路由与控制器命名规范统一。 此内容根据文章生成，仅用于文章内容的解释与总结 ThinkPHP6 跨域开起后某些接口请求报错跨域所有接口在本地调试正常，但是部署在服务器之后有的接口出现跨域报错。解决办法路由文件和控制器命名要规范，最好使用单个单词 原# 控制器名 PhotoAlbums.pnp # 控制器类名 PhotoAlbums # 路由名 Route::any('photoAlbums', 'home/photoAlbums/index')->name('photoAlbumsHome');现# 控制器名 Photo.pnp # 控制器类名 Photo # 路由名 Route::any('photo', 'home/photo/index')->name('photoHome');成功解决问题
AI摘要 在ThinkPHP6中开启跨域，可通过继承`think\middleware\AllowCrossDomain`新建自定义中间件，并在类中配置`Access-Control`相关响应头。随后在`app/middleware.php`中注册该中间件，即可实现全局或路由级别的跨域支持。 此内容根据文章生成，仅用于文章内容的解释与总结 ThinkPHP6 开启接口跨域1.新建中间件<?php namespace app\home\middleware; use Closure; use think\middleware\AllowCrossDomain; use think\Request; use think\Response; use think\response\Redirect; class Allow extends AllowCrossDomain { protected $header = [ 'Access-Control-Allow-Credentials' => 'true', 'Access-Control-Max-Age' => 1800, 'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE, OPTIONS', 'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, jwtToken', ]; }2.全局使用中间件或者路由使用中间件app/middleware.php<?php // 全局中间件定义文件 return [ // 加上这句 \app\home\middleware\Allow::class, ];
AI摘要 本文介绍了在ThinkPHP6中集成JWT Token的方法。通过安装firebase/php-jwt库，创建Token类实现签发与验证逻辑，并配合中间件对请求进行拦截校验，从而实现用户身份的有效管理与安全认证。 此内容根据文章生成，仅用于文章内容的解释与总结 ThinkPHP6 使用JwtToken1.安装JwtTokencomposer require firebase/php-jwt2.新建PHP类文件这里新建了Token.php类文件，用于token的签发和验证<?php namespace app\home; use Firebase\JWT\JWT; use Firebase\JWT\Key; class Token { protected $salt; protected $keyId; public function __construct() { $this->salt = md5("1585364631"); } function getToken($uid): string { $currentTime = time(); return JWT::encode([ "iss" => 'dao', "aud" => '', "iat" => $currentTime, "nbf" => $currentTime, "exp" => $currentTime + 3600 * 24, "data" => [ 'uid' => $uid, ] ], $this->salt, "HS256"); } public function checkToken($token): array { $res = array("code"=>201); try { JWT::$leeway = 60; $decoded = JWT::decode($token, new Key($this->salt, 'HS256')); return [ "code"=>200, "data"=>((array)$decoded)['data'] ]; } catch(\Firebase\JWT\SignatureInvalidException $e) { $res['msg']="签名不正确"; }catch(\Firebase\JWT\BeforeValidException|\Firebase\JWT\ExpiredException $e) { $res['msg']="token失效"; } catch(\Exception $e) { $res['msg']="token无效"; } return $res; } }3.新建中间件文件需要登入使用的进行校验<?php namespace app\home\middleware; use app\home\Token; use Closure; use think\Request; use think\Response; use think\response\Redirect; class UserToken { /** * 处理请求 * * @param Request $request * @param Closure $next * @return Response|Redirect */ public function handle(Request $request, Closure $next) { $token = $request->header('jwtToken',""); $res = (new Token())->checkToken($token); if ($res['code'] != 200 ){ return json($res); } $request->uid = $res['data']->uid; return $next($request); } }