Laravel и паспорт: метод POST возвращает исключение MethodNotAllowedHttpException

Я 2 дня искал в Интернете решение своей проблемы, но безрезультатно. Я новичок в Laravel и API в целом, так что терпите меня.

Мне удалось создать рабочий REST API с использованием passport через composer:

Маршруты в routes/api.php:

Route::post('login', 'PassportController@login');
Route::post('register', 'PassportController@register');

И код контроллера для login и register:

public function login(Request $request){
    $validator = Validator::make($request->all(), [
        'email' => 'required|email',
        'password' => 'required'
    ]);

    if ($validator->fails()) {
        return response()->json(['error'=>$validator->errors()], 401);            
    }

    if (Auth::attempt(['email' => request('email'), 'password' => request('password')])){
        $user = Auth::user();
        $success['token'] =  $user->createToken('MyApp')->accessToken;
        return response()->json(['success' => $success], 200);
    }
    else{
        return response()->json(['error'=>'Unauthorised'], 401);
    }
}

public function register(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name' => 'required',
        'email' => 'required|email',
        'password' => 'required'
    ]);

    if ($validator->fails()) {
        return response()->json(['error'=>$validator->errors()], 401);            
    }

    $input = $request->all();
    $input['password'] = bcrypt($input['password']);
    $user = User::create($input);
    $success['token'] =  $user->createToken('MyApp')->accessToken;
    $success['name'] =  $user->name;
    return response()->json(['success'=>$success], 200);
}

Этот API работает на localhost, но не когда я открываюсь в Интернете с помощью:

php artisan serve --host 192.168.x.x --port 80 

подключился к купленному домену через перенаправление портов.

работают только методы GET, но методы POST выдают ошибку:

405 Method Not Allowed

Насколько я понял, это как-то связано с перенаправлением с http на https:

I have a same problem on a half of month ago. The reason is when I post on valid route, it redirects from http to https (configured by .htaccess), so "POST" method becomes "GET" and you see a MethodNotAllowedException.
Check your browser and follow the request, you may see the accurate problem.

от Laravel: метод POST возвращает исключение MethodNotAllowedHttpException

Если это относится и ко мне, как мне решить проблему? В файле .htaccess ничего с https нет. Извините, если ответ находится в цитируемом ответе, но он не знает, как использовать эту информацию.

Обновлено: Я нашел кое-что о проблеме с токеном csrf https://laracasts.com/discuss/channels/laravel/405-method-not-allowed-laravel-55-api-passport-help. Но, на первый взгляд, это можно исправить, введя URI для методов POST в файл VerifyCsrfToken в папке Middleware, например:

protected $except = [
   'api/register',
   'api/login'
]; 

Я все еще получаю ошибку MethodNotAllowed ..... Это начинает сильно раздражать, поскольку, похоже, в Интернете нет ответов. ПОМОЩЬ!

Попробуйте добавить косую черту перед маршрутом. Route::post('/login', 'PassportController@login');

Chris 06.09.2018 21:18

@Chirs Laravel автоматически добавляет /, если его там нет.

Rwd 06.09.2018 21:21

Нет другого ответа? мне действительно нужно найти что-то еще, кроме паспорта, для аутентификации моего API? это не может быть правдой

Varyag 10.09.2018 10:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
969
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, мне не хватало «www», когда я делал запросы.

У меня в почтальоне было:

mysite.com/api/login

но мне нужно было:

www.mysite.com/api/login

Смущающая небольшая ошибка новичка, на которую мне пришлось потратить 5 дней ... Надеюсь, это поможет любым новым веб-разработчикам, столкнувшимся с той же проблемой, и не тратить зря время, как я.

Другие вопросы по теме