Laravel 5.6 Passport:Ajax请求携Token获取用户详情方法问询
切换到Laravel Passport后,Ajax请求携带Token获取用户详情的正确姿势
嘿,很高兴看到你已经顺利切换到Laravel Passport并搞定了Token的创建与获取!针对你的问题,我来给你梳理清楚具体的做法:
要不要替换原来的api_token=somevalue方式?
答案是必须替换。Laravel自带的Token Guard用的是简单的api_token参数(不管是放在URL里还是请求头),而Passport遵循OAuth2标准,使用的是Bearer Token机制——这是Passport认证的标准方式,同时也能让你享受到Passport提供的令牌过期、刷新令牌、客户端认证等进阶功能。
Ajax请求如何正确携带Passport Token?
最推荐也是最安全的方式是将Token放在请求头里,具体步骤如下:
1. 请求头携带Bearer Token(推荐)
在Ajax请求的headers中添加Authorization字段,格式为Bearer {你的Token}。下面是两种常见的Ajax实现示例:
jQuery Ajax示例
// 假设你已经把获取到的Passport Token存在了localStorage里 const passportToken = localStorage.getItem('passport_token'); $.ajax({ url: '/api/user', // 你的用户详情接口路由 method: 'GET', headers: { 'Authorization': `Bearer ${passportToken}`, 'Accept': 'application/json' // 确保后端返回JSON格式 }, success: function(user) { console.log('用户详情:', user); // 这里可以处理用户信息的渲染逻辑 }, error: function(xhr) { console.error('认证失败:', xhr.responseJSON?.message || '未知错误'); } });
原生Fetch API示例
const passportToken = localStorage.getItem('passport_token'); fetch('/api/user', { method: 'GET', headers: { 'Authorization': `Bearer ${passportToken}`, 'Accept': 'application/json' } }) .then(response => { if (!response.ok) { throw new Error('认证失败或请求出错'); } return response.json(); }) .then(user => { console.log('用户详情:', user); }) .catch(error => { console.error('请求失败:', error.message); });
2. URL参数携带Token(不推荐)
虽然Passport也支持将Token放在URL参数中(格式为?access_token={你的Token}),但这种方式并不安全——URL可能会被浏览器缓存、服务器日志记录或者通过Referer泄露,所以只建议在测试场景临时使用,生产环境一定要用请求头方式。
示例:
$.ajax({ url: `/api/user?access_token=${passportToken}`, method: 'GET', // ...其他配置 });
后端路由配置注意事项
确保你的用户详情接口已经使用了Passport的auth:api中间件,这样后端才能正确解析Bearer Token并验证用户身份:
// routes/api.php use Illuminate\Http\Request; Route::middleware('auth:api')->get('/user', function (Request $request) { // 返回当前认证用户的详情 return $request->user(); });
这样配置后,只要Ajax请求携带了有效的Bearer Token,就能成功获取到用户详情啦!
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

