Laravel配置JWT对接WordPress API实现仪表盘数据展示咨询
Laravel对接WordPress JWT API 实现仪表盘数据展示方案
一、Laravel配置JWT对接WordPress API步骤
这里的JWT用于让Laravel安全调用WordPress的JWT接口,你也可以同时用它做Laravel后台用户登录,核心是完成跨系统的API数据拉取:
安装Laravel JWT依赖包
用composer安装业内常用的JWT工具包:composer require tymon/jwt-auth发布配置文件并生成加密密钥:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" php artisan jwt:secret配置用户模型(如需Laravel后台登录验证)
如果你的仪表盘需要用户登录权限,让User模型实现JWTSubject接口:namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; } }同时在
config/auth.php里配置JWT驱动的守卫:'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ],编写WordPress API调用服务
创建一个服务类封装API请求逻辑,比如app/Services/WordPressApiService.php:namespace App\Services; use GuzzleHttp\Client; class WordPressApiService { protected $client; protected $token; public function __construct() { $this->client = new Client([ 'base_uri' => config('wordpress.api_url'), // 在config中配置WordPress站点地址 'headers' => [ 'Authorization' => 'Bearer ' . config('wordpress.jwt_token'), // 从WordPress获取的有效token 'Accept' => 'application/json', ], ]); } // 获取已安装插件列表 public function getPlugins() { $response = $this->client->get('/wp-json/wp/v2/plugins'); // 对应WordPress JWT插件的端点 return json_decode($response->getBody(), true); } // 获取主题信息 public function getThemes() { $response = $this->client->get('/wp-json/wp/v2/themes'); return json_decode($response->getBody(), true); } }可以在
config/app.php中添加服务别名,或者直接在控制器里通过依赖注入使用。控制器调用服务并传递数据到模板
在仪表盘控制器中调用服务获取数据,再传给Blade视图:namespace App\Http\Controllers; use App\Services\WordPressApiService; class DashboardController extends Controller { public function index(WordPressApiService $wpApi) { $plugins = $wpApi->getPlugins(); $themes = $wpApi->getThemes(); return view('dashboard', compact('plugins', 'themes')); } }最后在Blade模板中直接遍历数据展示:
<h3>已安装插件</h3> <ul> @foreach($plugins as $plugin) <li>{{ $plugin['name'] }} - 版本:{{ $plugin['version'] }}</li> @endforeach </ul> <h3>当前主题</h3> <div> <p>名称:{{ $themes['active']['name'] }}</p> <p>版本:{{ $themes['active']['version'] }}</p> </div>
二、替代方案
如果觉得JWT配置繁琐,可选择以下更轻量化的方案:
- WordPress应用密码认证:WordPress 5.6+自带应用密码功能,无需额外插件,在用户个人中心生成应用密码后,调用API时用Basic Auth(用户名:应用密码做Base64编码),简单易上手。
- 直接读取WordPress数据库:在Laravel的
config/database.php中添加WordPress数据库连接,直接查询wp_plugins、wp_options表获取数据,但这种方式耦合性极高,WordPress结构变动会直接影响仪表盘,仅适合测试场景。 - OAuth2认证:安装WordPress的OAuth2插件,Laravel用
league/oauth2-client包对接,这是更标准的第三方应用认证方式,适合多站点或严格权限控制的场景。
三、关键注意点
- 确保WordPress的JWT插件配置正确:开启跨域支持(若Laravel与WordPress域名不同),设置好JWT密钥,开放所需API端点。
- 调用API时严格遵循
Bearer {token}的Authorization头格式,注意token的过期时间,必要时实现自动刷新逻辑。 - 处理API请求异常:在服务类中添加try-catch块,捕获网络错误、token失效、权限不足等情况,返回友好提示或记录日志。
内容的提问来源于stack exchange,提问作者niwretto
相关产品推荐
相关产品推荐

