在Vue.js/Laravel中刷新JWT令牌后将数据重新发布到服务器,可以按照以下步骤进行操作:
import axios from 'axios';
// 创建axios实例
const api = axios.create({
baseURL: 'http://your-api-url.com',
});
// 请求拦截器
api.interceptors.request.use(
(config) => {
// 检查JWT令牌是否过期
const token = localStorage.getItem('jwtToken');
if (token) {
const expiration = JSON.parse(atob(token.split('.')[1])).exp;
const currentTimestamp = Math.floor(Date.now() / 1000);
if (expiration < currentTimestamp) {
// JWT令牌过期,发送刷新令牌请求
return api.post('/refresh-token')
.then((response) => {
const newToken = response.data.token;
localStorage.setItem('jwtToken', newToken);
config.headers.Authorization = `Bearer ${newToken}`;
return Promise.resolve(config);
})
.catch((error) => {
// 刷新令牌请求失败,跳转到登录页或执行其他操作
console.error('Failed to refresh token:', error);
// 跳转到登录页
window.location.href = '/login';
return Promise.reject(error);
});
}
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
export default api;
// routes/api.php
Route::post('/refresh-token', 'AuthController@refreshToken');
// app/Http/Controllers/AuthController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function refreshToken(Request $request)
{
$newToken = Auth::guard('api')->refresh();
return response()->json(['token' => $newToken]);
}
}
auth:api
中间件来保护需要身份验证的路由。// routes/api.php
Route::middleware('auth:api')->group(function () {
// 需要身份验证的路由
});
这样,当JWT令牌过期时,前端会发送一个刷新令牌的请求到Laravel后端,后端会生成一个新的JWT令牌并返回给前端。前端将新的JWT令牌存储在本地,并在下一次请求时使用新的令牌进行身份验证。
请注意,以上代码只是一个示例,你需要根据你的实际情况进行适当的修改和调整。此外,还需要确保你已经正确配置了JWT认证和Laravel的身份验证。
领取专属 10元无门槛券
手把手带您无忧上云