Laravel中如何将请求返回的access_token存入MySQL数据库
实现Laravel中存储access_token到MySQL的步骤
假设你的迁移表包含access_token字段(可按需添加expires_at等辅助字段),按以下步骤完成存储:
1. 创建对应的数据模型(Model)
如果还未创建模型,执行Artisan命令生成:
php artisan make:model AccessToken
在生成的app/Models/AccessToken.php中,设置可批量赋值的字段(确保包含access_token,有其他字段如过期时间也一并添加):
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class AccessToken extends Model { // 允许批量赋值的字段 protected $fillable = ['access_token', 'expires_at']; // 若迁移表名不是复数形式(比如表名为access_token而非access_tokens),需指定表名 // protected $table = 'access_token'; }
2. 在控制器中处理响应并存储
在你发起POST请求的控制器方法里,获取响应后解析数据,调用模型完成存储:
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Http; use App\Models\AccessToken; class YourController extends Controller { public function fetchAndStoreToken() { // 发起POST请求获取token $response = Http::post('https://your-token-api-url.com', [ 'grant_type' => 'client_credentials', 'client_id' => env('API_CLIENT_ID'), 'client_secret' => env('API_CLIENT_SECRET'), // 其他必要参数 ]); // 检查请求是否成功 if ($response->successful()) { $tokenData = $response->json(); // 提取access_token和可能的过期时间 $accessToken = $tokenData['access_token']; // 若API返回过期秒数,计算绝对过期时间 $expiresAt = now()->addSeconds($tokenData['expires_in']); // 存储token:用updateOrCreate避免重复存储,可根据业务需求改为create AccessToken::updateOrCreate( ['id' => 1], // 假设只存一条全局token,用固定id或其他唯一标识 [ 'access_token' => $accessToken, 'expires_at' => $expiresAt ] ); return response()->json(['message' => 'Token存储成功']); } // 请求失败的处理 return response()->json(['message' => '获取Token失败'], $response->status()); } }
3. 可选:业务逻辑细节优化
- 若需存储多组token(比如不同客户端/用户的),调整
updateOrCreate的查询条件,比如用client_id作为唯一标识 - 添加异常捕获处理网络请求异常:
try { $response = Http::post('https://your-token-api-url.com', [...]); // 后续存储逻辑 } catch (\Exception $e) { return response()->json(['message' => '请求外部API失败:' . $e->getMessage()], 500); }
- 若迁移表包含
token_type等其他字段,需在Model的$fillable和存储数组中同步添加对应字段
内容的提问来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

