laravel - 将 JWT 与 Laravel 和 Axios 一起使用时,JWT 可以工作,但其他路由总是返回 401 Unauthenticated
问题描述
我已经在 Laravel 中成功实现了 JWT,一切正常。登录,注销。
但是每次我想在我的路由中添加一个新路由routes/api.php
并尝试将它与控制器一起使用时,我都会得到一个401 Unauthenticated
. 似乎控制器没有被寻址,因为没有var_dump
回来。
我的config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
我的请求:
let myConfig = {
headers: {
Authorization: "Bearer " + 'JWT_SECRET'
}
}
axios.get('http://localhost/api/getcashboxes', myConfig)
.then(res => {
console.log(res.data)
}).catch(err => {
console.log(err)
})
我的routes/api.php
use Illuminate\Http\Request;
Route::get('getcashboxes', 'CashboxController@getcashboxes')->name('getcashboxes');
Route::group(['prefix' => 'auth'], function ($router) {
Route::post('login', 'AuthController@login');
Route::post('logout', 'AuthController@logout');
Route::post('refresh', 'AuthController@refresh');
Route::post('me', 'AuthController@me');
});
我的CashboxController.php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class CashboxController extends Controller
{
public function __construct()
{
$this->middleware('auth:api', ['except' => ['login']]);
//$this->middleware('auth:api'); //Does not work too
}
public function getcashboxes()
{
var_dump("Hello World :)");
}
}
请求头:
Accept
application/json, text/plain,
Accept-Encoding
gzip, deflate
Accept-Language
de,en-US;q=0.7,en;q=0.3
Authorization
Bearer 5zqyH1BrQUbiDRefurc5XaduzaTyCXPlcPXbodDHhsgdjJHU1dDHhsgdjefur
Cache-Control
max-age=0
Connection
keep-alive
Cookie
XSRF-TOKEN=eyJpdiI6IlVjRFwvYkRvaSs3cDBCVFkxMFZtZkhRPT0iLCJ2YWx1ZSI6Imw4WlZ3RlwvVjNQemZOaTRQXC84MDlrd01uc0dFeUZ4eCtuR29jcWFqTGZBY3RkdzdFdFpzWjB4UDZOQzhQYXRTUCIsIm1hYyI6ImE5ODFkODM1ODU3M2Q3ZDEyZDY1NjdiYTY3ZGJkN2FlNGIzYWRiZTcxNjI4ODc3MmZkYzg3MGZjMzhmODlhODkifQ%3D%3D; buywatchvue_session=eyJpdiI6IjFSb25ZdmthalF2Tm1TWjM4cnUzRkE9PSIsInZhbHVlIjoiQms0SDNGNlFPcXM1YVR2MTZzeEJpRkc1MnlPeFlGOW5IRlRVR0pTZWI3MUk2XC9RMUdsYVp5SWQyTnJRcitoazIiLCJtYWMiOiI0ZmYyNjQxOWY0NjAxNzM4NzY2YzBmYjY2Mjc2OTcyNTE0ZjVkYzdlMDU2YzE0MWE4Y2U2MzZmNTFkNzU2MWY4In0%3D; laravel_session=eyJpdiI6Ik4wNGRJM3Q5QU5KRUlIbWZoaUE4VkE9PSIsInZhbHVlIjoiNmNLb09JeU5DRksxM1VNMElPNDNQb1NseVNJYWdTdXpZdnZyS1RuMlVRY043OUJcLzREMXhkaWR3TmR6ZklWaWIiLCJtYWMiOiJmYWViNzIxMmZjYTU1N2UwYmI2OTU3YzAyNmFmNzM3NjAyMzY5N2Q2MTAyMzEwNzc1MDZlZWQzMjE4YWZiN2UyIn0%3D
Host
localhost
Referer
http://localhost
User-Agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
X-CSRF-TOKEN
DClSR93LzbeM4SZQ9OzZJ89s5jtiNFOfkWabYMSJ
X-Requested-With
XMLHttpRequest
X-XSRF-TOKEN
eyJpdiI6IlVjRFwvYkRvaSs3cDBCVFkxMFZtZkhRPT0iLCJ2YWx1ZSI6Imw4WlZ3RlwvVjNQemZOaTRQXC84MDlrd01uc0dFeUZ4eCtuR29jcWFqTGZBY3RkdzdFdFpzWjB4UDZOQzhQYXRTUCIsIm1hYyI6ImE5ODFkODM1ODU3M2Q3ZDEyZDY1NjdiYTY3ZGJkN2FlNGIzYWRiZTcxNjI4ODc3MmZkYzg3MGZjMzhmODlhODkifQ==
答案标题:
Cache-Control
no-cache, private
Connection
Keep-Alive
Content-Length
30
Content-Type
application/json
Date
Sat, 22 Aug 2020 14:12:25 GMT
Keep-Alive
timeout=5, max=99
Server
Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.0
Vary
Authorization
X-Powered-By
PHP/7.3.0
任何人的想法?
解决方案
你可以创建一个 axios 的实例并像我一样使用它。
const instance = axios.create({
baseURL: 'http://localhost/api'
});
instance.defaults.headers.common['Authorization'] = `Bearer ${token}`;
instance.get('/getcashboxes')
.then(res => {
console.log(res.data)
}).catch(err => {
console.log(err)
})
如果它可以帮助您解决问题,请告诉我。
推荐阅读
- python - 如何将自定义规则添加到 spaCy 标记器以将 HTML 分解为单个标记?
- sql - 将平面 JSON 结构转换为表格
- android - 如何通过 HTTP(S) 向 Android 应用程序发送数据
- amazon-web-services - 如何模拟 API Gateway RestAPI 端点并根据请求在响应中返回自定义变量?
- php - Mac CLI PHP ini 文件位置
- amazon-web-services - 来自 AWS SQS 的选择性读取消息
- swift - 使用四元数的 SceneKit 旋转
- python - Kivy-如何使用python操作kivy中的输入?
- python - python spacy循环解析引理并在令牌上添加特殊情况
- ruby-on-rails - Rails 时区设置不正确