Почему Laravel `Middleware ('Auth: Sanctum')` вызывает 302 выпуска?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Почему Laravel `Middleware ('Auth: Sanctum')` вызывает 302 выпуска?

Сообщение Anonymous »

Я пытаюсь получить некоторые данные из конечной точки API Laravel, но я получаю очень необычные проблемы перенаправления и запрещенные методы. Сначала я начну с того, что сначала покажу свой код JavaScript, затем код Laravel.

Код: Выделить всё

fetch("https://api.example.com/login",{
method:"post",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({"email":"test@test.com","password":"test","remember_me":true})
})
.then(r=>r.json())
.then(r=>console.log(r));

// I get a perfect response like this:

{ data: { message: "Yay! Success!", token: "86|S5isCezrsYb1aToAsI3xZb9Ot9Tu7WU8XeOK1q8C" } }

Я затем возьму токен и сделаю еще один запрос GET от моей консоли разработчика в конечную точку/auth/user , чтобы получить подобные данные моей учетной записи

Код: Выделить всё

fetch("https://api.example.com/auth/user",{
method:"get",
header:{
Authorization:"Bearer 86|S5isCezrsYb1aToAsI3xZb9Ot9Tu7WU8XeOK1q8C",
Accept: "application/json"
},
})
.then(r=>r.json())
.then(r=>console.log(r));

< /code>
Но происходит что -то совершенно странное.  Https://api.example.com/auth/user 
дает моей консоли разработчика 302 ответ. Затем моя консоль разработчика автоматически (без какого -либо вмешательства от меня) делает запрос GET на https://api.example.com/login . Https://api.example.com/login дает ответ 405 с этим сообщением:

Код: Выделить всё

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: The GET method is not supported for this route. Supported methods: POST. in file /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php on line 117

#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php(103): Illuminate\Routing\AbstractRouteCollection->methodNotAllowed(Array, 'GET')
#1 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php(40): Illuminate\Routing\AbstractRouteCollection->getRouteForMethods(Object(Illuminate\Http\Request), Array)
#2 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php(162):
...etc...
< /code>
Это мой код Laravel: < /p>

~/routes/api.php

Route::post('login', ['as' => 'login', 'uses' => 'Api\UserController@login']); //->middleware(['throttle:6,1']);

Route::middleware('auth:sanctum')->get('/auth/user', function (Request $request) {
return $request->user();
});

~/app/Http/Controller/Api/UserController.php

public function login(LoginRequest $request)
{
$user = User::where('email', $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'message' => ['The provided credentials are incorrect.'],
]);
exit;
} else if (!$user->active) {
throw ValidationException::withMessages([
'message' => ['Your account approval is pending.'],
]);
exit;
}
return response()->json([
'data' => [
"message" => __("Yay! Success!"),
"token" => $user->createToken('authentication-token')->plainTextToken,
],
]);
}

Итак, мой вопрос: почему/auth/user endpoint возвращайте информацию об пользователе, с которым я вошел? Authuser как в Route/Api.php , так и в моем вызове fetch () , и вдруг у меня возникнет ошибка Cors. Является ли Auth/ каким -то зарезервированным словом?

Код: Выделить всё

'paths' => [
'api/*',
'auth/user',
'login',
'logout',
'sanctum/csrf-cookie',
],
< /code>

Обновление < /p>
Я создал еще несколько маршрутов, подобных этим: < /p>
~/routes/api.php
Route::middleware(['auth:sanctum'])->group(function () {
Route::resource('blah1', Api\Blah1::class)->only(['index', 'store', 'show', 'update', 'destroy']);
Route::resource('blah2', Api\Blah1::class)->only(['index', 'store', 'show', 'update', 'destroy']);
// ..  etc...
Route::get('/auth/user', function (Request $request) {
return $request->user();
});
});

~/config/cors.php

'paths' => [
'api/*',
'auth/user',
'blah*',
'login',
'logout',
'sanctum/csrf-cookie',
],

Я заметил, что у почтана нет проблем с получением информации от Auth/user и blah1, blah2, и т. Д. ...
Однако, это просто браузер, который всегда даст 302 и вызовет перенаправление, когда пингирует Auth/user, blah1, blah2, etc ... . Firefox показывает мне эти ответы:

, если я удалю промежуточное программное обеспечение ('auth: sanctum') , то я не получу проблему 405 и 302. Однако $ request-> user () становится нулевым без промежуточного программного обеспечения ('auth: sanctum') . Мне нужен способ получить информацию пользователя из авторизации: Пресс

Подробнее здесь: https://stackoverflow.com/questions/686 ... 302-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»