У меня есть проект с Laravel для управления вызовами конечной точки и Vue для управления внешним интерфейсом.
Когда пользователь выполняет вход в систему, ответ ( токен ), сохраненный в localStorage , затем в приложении. js я автоматически добавляю этот токен ко всем вызовам.
Логин
axios
.post("http://127.0.0.1:8000/api/login", {
username: this.username,
password: this.password
})
.then(response => {
if (response.data.token != null) {
localStorage.setItem("token", response.data.token);
//PUSH SECOND PAGE
}
})
Приложение. js
const token = localStorage.getItem('token')
if (token) {
axios.defaults.headers.common['Authorization'] = "Token " + token
}
Теперь мы увидим проблему.
Когда мы go на второй странице вызов конечной точки будет запущен автоматически для заполнения некоторых входов. Этот вызов теоретически имеет токен localStorage.
mounted() {
axios
.get("http://127.0.0.1:8000/api/elements")
.then(response => {
console.log(response.data);
})
.catch(function(error) {
console.log(error);
});
}
Маршруты (конечные точки API)
Route::get('elements', 'HeaderController@elements')->name('header.elements');
HeaderController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class HeaderController extends Controller
{
public function elements()
{
$response = Http::get('API');
return $response->json();
}
}
Возвращает Доступ запрещен . Токен сообщается в шапке.
Любопытно, но если мы обратимся напрямую к API через Ax ios, ответ будет правильным, но если мы используем Laravel конечную точку, вернем этот Отказ в доступе.
Итак: Кто-нибудь видит Ошибка? Почему ax ios возвращает правильный ответ, а Laravel возвращает 403?
UPDATE 1
LoginController Laravel Класс
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
//use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\Http\Requests\LoginRequest;
use Illuminate\Support\Facades\Http;
class LoginController extends Controller
{
// use AuthenticatesUsers;
protected $redirectTo = RouteServiceProvider::HOME;
/* public function __construct()
{
$this->middleware('guest')->except('logout');
}*/
public function login(LoginRequest $request)
{
$response = Http::post('API', [
'username' => $request->username,
'password' => $request->password,
]);
return $response->body();
}
}
ОБНОВЛЕНИЕ 2 ( Игнорировать это, я исправляю это )
Когда я вызываю API через Топор ios имеет
Content-Type: application / json
если я использую Laravel конечная точка имеет
Content-Type: text / html; charset = UTF-8
ОБНОВЛЕНИЕ 3
Массив, ожидаемый в ответе конечной точки
{
"code": 0,
"message": "",
"body": [
{
"id": 1,
"entity": "Test1",
"agrupations": [
{
"id": 6,
"name": "A"
},
{
"id": 7,
"name": "B"
}
]
},
{
"id": 2,
"entity": "Test2",
"agrupations": [
{
"id": 8,
"name": "C"
},
{
"id": 9,
"name": "D"
}
]
},
{
"id": 3,
"entity": "Test3",
"agrupations": [
{
"id": 1,
"name": "E"
},
{
"id": 11,
"name": "F"
}
]
},
{
"id": 4,
"entity": "Test4",
"agrupations": [
{
"id": 10,
"name": "G"
}
]
}
]
}
ОБНОВЛЕНИЕ 4
Я комментирую auth route, чтобы избежать конфликтов маршрутов
Web. php
//Auth::routes();
ОБНОВЛЕНИЕ 5
Полный cURL.
Мммм, может быть Laravel X-XSRF-TOKEN и SRF-TOKEN что-то сломали.
Это не работает (с использованием Laravel для конечной точки)
curl 'http://127.0.0.1: 8000 / api / elements ' -H 'Соединение: поддержания активности '-h 'DNT: 1' -H 'X-XSRF-ЗНАК: eyJpdiI6IjV4aU9qOXpaY2FoLytIQ1RTSi9jZGc9PSIsInZhbHVlIjoiWTlmOUcwL21Ld0xVYXZwdWZyVDJhVktzczlJSzVtdHE2UUsvREp3Nm51RjBZYStaaXptYmx0N0F0bzVkWTQvQiIsIm1hYyI6IjE3OWFiOGU5ZjFjZDhhMDc4OTUzYmJjZDUxZWYwMWY3MzgyOTg3YjM0MjFlNjk5MTc0MGExZDNmYmQ2YzIzY2IifQ ==' -H' Разрешение: Токен eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1ODUxNTYzMjgsImlzcyI6Imh0dHBzOi8vd3d3LmFyc29uLmNvbS8iLCJzdWIiOiJhbGFyYSIsImV4cCI6MTU4NjAyMDMyOH0.Mv968xR4IA dbkgqABvg2CLNxSc6mkFPxqEKm9VbbFYOg-H5Ppo80DEsoj8F8pT2yoY7LHF5P_zMbWymAwxPzvQ '-H' Принять: приложение / json, текст / обычный, / .0: Mo: агент 10: 10 * (*): агент *: 10 * (*): агент *: 10 * (*): агент * Windows 5.0 -H Win64; x64) AppleWebKit / 537.36 (K HTML, как Gecko) Chrome / 80.0.3987.149 Safari / 537.36 '-H' Se c -Fetch-Dest: пусто '-H' X-Requested-With: XMLHttpRequest '-H 'Se c -Fetch-Site: тот же источник' -H 'Se c -Fetch-Mode: cors' -H 'Ссылка: http://127.0.0.1: 8000 / lora / ' -H 'Accept-Language: ES-ES, ES, Q = 0,9, ан; д = 0,8' -H «Кук ie: XSRF-ЗНАК = eyJpdiI6IjV4aU9qOXpaY2FoLytIQ1RTSi9jZGc9PSIsInZhbHVlIjoiWTlmOUcwL21Ld0xVYXZwdWZyVDJhVktzczlJSzVtdHE2UUsvREp3Nm51RjBZYStaaXptYmx0N0F0bzVkWTQvQiIsIm1hYyI6IjE3OWFiOGU5ZjFjZDhhMDc4OTUzYmJjZDUxZWYwMWY3MzgyOTg3YjM0MjFlNjk5MTc0MGExZDNmYmQ2YzIzY2IifQ% 3D% 3D; lorawan_session = eyJpdiI6IjZEa1ZQWkY1ZHhYamxPaUxSWGFvdUE9PSIsInZhbHVlIjoiaGltclROWnZPTWR4TWZZa3VzcUU4ekZjUklUUWlSNGo5U1pPM1ZLcVpJU0NoVS9ma1hmTS9reW1ENWNWMHJNcSIsIm1hYyI6ImUyYWVkZmUxYTk2M2IzMWQ5MTkyY2RkYzZjZDA3N2U5YTdjNDhiYzliNGQzZjEzOGYzMjFiODJhZWFlMjE3ODcifQ% 3D% 3D»--compressed
Данная работа (с использованием Ax ios позвонить непосредственно API)
локон "API" -H«Подключение : keep-alive "-H" Принять: application / json, текст / обычный, /"-H" Se c -Fetch-Dest: empty "-H" X-Requested-With : XMLHttpRequest "-H" Авторизация: Токен eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1ODUxNTcyODksImlzcyI6Imh0dHBzOi8vd3d3LmFyc29uLmNvbS8iMyYIIIIIIIIIIIIIIIIIIIIIIIIIII6IIIIIIIIIII6I 9MfXYgBDhYltmbfz7rwFWhL0dQUFFRO43ioK8cVlM2C1_-9GolXeC9e55hEclmP4bTuGWfS5HOj9SOWXiDowLA "-H" Пользователь-агент: Mozilla / 5.0 (Sa5) * 53 * 68) 685: 68.0: 68.0: 68.67: 68.0: 68.0: 68.0: 68.0: 68.0: 68.0: 68.65: 68.0: 68.0: 68.0: 68.67: 68.0: 68.67: 68.0: 68.67: 64.0: 68.67: 68.0: 68.67: 68.0: 68.67 : 1 "-H" Происхождение: http://127.0.0.1: 8000"-H" Se c -Fetch-Site: кросс-сайт "-H" Se c -Fetch-Mode: cors " -H "Referer: http://127.0.0.1: 8000 / lora / " -H "Accept-Language: es-ES, es; q = 0,9, en; q = 0,8" - сжатый