php - Laravel 和护照:POST 方法返回 MethodNotAllowedHttpException
问题描述
我一直在互联网上寻找 2 天的解决方案来解决我的问题,但无济于事。我是 Laravel 和整个 API 的新手,所以请耐心等待。
我已经设法使用passport
via创建了一个有效的 REST API 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
但当我通过以下方式打开 Internet 时无法使用:
php artisan serve --host 192.168.x.x --port 80
通过端口转发连接到购买的域。
只有GET
方法有效,但POST
方法给出了错误:
405 方法不允许
据我所知,它与从 http 重定向到 https 有关:
半个月前我也有同样的问题。原因是当我在有效路由上发布时,它会从 http 重定向到 https(由 .htaccess 配置),因此“POST”方法变为“GET”并且您会看到 MethodNotAllowedException。
检查您的浏览器并按照请求进行操作,您可能会看到准确的问题。
来自Laravel:POST 方法返回 MethodNotAllowedHttpException
如果我也是这种情况,我该如何解决这个问题?该.htaccess
文件中没有任何https
内容。抱歉,如果答案在引用的答案中,但它不知道如何使用该信息。
更新:
我发现了一些关于 csrf 令牌问题的信息https://laracasts.com/discuss/channels/laravel/405-method-not-allowed-laravel-55-api-passport-help。但显然它可以通过在文件夹中的文件中输入POST
方法的 URI 来修复,如下所示:VerifyCsrfToken
Middleware
protected $except = [
'api/register',
'api/login'
];
我仍然收到 MethodNotAllowed 错误.....这开始很烦人,因为网上似乎没有答案。帮助!
解决方案
显然我在做请求时错过了“www”。
我在邮递员中有以下内容:
mysite.com/api/login
但我需要:
www.mysite.com/api/login
令人尴尬的小菜鸟错误,花了我 5 天的时间才弄清楚……我希望这将有助于遇到同样问题的任何新的 web 开发人员,这样他们就不会像我一样浪费时间。
推荐阅读
- java - 收到握手警告:unrecognized_name
- sql - PostgreSQL DATE_PART 函数
- java - 尝试解析 apache-commons-chains 的目录 XML 时出现 EmptyStackException
- r - 如何强制“pairlist”对象键入“double”(对于ggscatter cor.coef)?
- java - 使用 PDFBOX 将 PDF 文档所有页面导出为 A4 大小的图像(PDF 文档包含不同的页面大小,如 A3 和 Letter )
- r - R中的特殊/保留属性列表?
- python - PyCharm - from turtle import * -- 提供未使用的导入参考
- laravel - 通过虚拟主机和端口进行 API 访问?
- python - Python:与 MacOS 相比,Windows10 上的 Scipy 非常慢
- r - 如何将变量从一个 R 脚本重用到另一个?