Я 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 ..... Это начинает сильно раздражать, поскольку, похоже, в Интернете нет ответов. ПОМОЩЬ!
@Chirs Laravel автоматически добавляет /, если его там нет.
Нет другого ответа? мне действительно нужно найти что-то еще, кроме паспорта, для аутентификации моего API? это не может быть правдой






Похоже, мне не хватало «www», когда я делал запросы.
У меня в почтальоне было:
mysite.com/api/login
но мне нужно было:
www.mysite.com/api/login
Смущающая небольшая ошибка новичка, на которую мне пришлось потратить 5 дней ... Надеюсь, это поможет любым новым веб-разработчикам, столкнувшимся с той же проблемой, и не тратить зря время, как я.
Попробуйте добавить косую черту перед маршрутом.
Route::post('/login', 'PassportController@login');