Laravel 和护照:POST 方法 returns MethodNotAllowedHttpException
Laravel and passport: POST method returns MethodNotAllowedHttpException
我已经在 Internet 上搜索了 2 天,但没有找到解决我问题的方法。我是 Laravel 和 API 的新手,所以请多多包涵。
我已经通过 composer
:
使用 passport
创建了一个工作 REST API
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.
来自
如果我也是这种情况,该如何解决? .htaccess
文件中没有包含 https
的内容。很抱歉,如果答案在引用的答案中,但它不知道如何使用该信息。
更新:
我发现了一些关于 csrf 令牌问题 https://laracasts.com/discuss/channels/laravel/405-method-not-allowed-laravel-55-api-passport-help。但显然可以通过在 Middleware
文件夹的 VerifyCsrfToken
文件中输入 POST
方法的 URI 来修复它,如下所示:
protected $except = [
'api/register',
'api/login'
];
我仍然收到 MethodNotAllowed 错误..... 这开始真的很烦人,因为在线似乎没有答案。帮助!
显然我在执行请求时错过了 "www"。
我在邮递员中有以下内容:
mysite.com/api/login
但我需要:
www.mysite.com/api/login
令人尴尬的小菜鸟错误,花了我 5 天的时间才弄清楚...我希望这能帮助 运行 遇到同样问题的任何新网络开发人员,这样他们就不会像我一样浪费时间。
我已经在 Internet 上搜索了 2 天,但没有找到解决我问题的方法。我是 Laravel 和 API 的新手,所以请多多包涵。
我已经通过 composer
:
passport
创建了一个工作 REST API
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.
来自
如果我也是这种情况,该如何解决? .htaccess
文件中没有包含 https
的内容。很抱歉,如果答案在引用的答案中,但它不知道如何使用该信息。
更新:
我发现了一些关于 csrf 令牌问题 https://laracasts.com/discuss/channels/laravel/405-method-not-allowed-laravel-55-api-passport-help。但显然可以通过在 Middleware
文件夹的 VerifyCsrfToken
文件中输入 POST
方法的 URI 来修复它,如下所示:
protected $except = [
'api/register',
'api/login'
];
我仍然收到 MethodNotAllowed 错误..... 这开始真的很烦人,因为在线似乎没有答案。帮助!
显然我在执行请求时错过了 "www"。
我在邮递员中有以下内容:
mysite.com/api/login
但我需要:
www.mysite.com/api/login
令人尴尬的小菜鸟错误,花了我 5 天的时间才弄清楚...我希望这能帮助 运行 遇到同样问题的任何新网络开发人员,这样他们就不会像我一样浪费时间。