Laravel和通行证:POST方法返回MethodNotAllowedHttpException

时间:2018-09-06 19:09:05

标签: php laravel rest api laravel-passport

我已经在整个互联网上寻找了2天的解决方案,但都无济于事。我是Laravel和API整体的新手,所以请多多包涵。

我已经通过passport使用composer创建了一个有效的REST API:

routes/api.php中的路线:

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

以及loginregister的控制器代码:

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方法不允许

据我所知,这与从http重定向到https有关:

  

半个月前,我遇到了同样的问题。   原因是当我在有效路线上发布时,它从http重定向到   https(由.htaccess配置),因此“ POST”方法变为“ GET”,   您会看到MethodNotAllowedException。
  检查您的浏览器并按照要求进行操作,您可能会看到正确的信息   问题。

来自Laravel: POST method returns MethodNotAllowedHttpException

如果我也遇到这种情况,该如何解决该问题? .htaccess文件中没有包含https的文件。抱歉,如果答案在引号中,但它不知道如何使用该信息。

更新: 我发现了有关csrf令牌问题https://laracasts.com/discuss/channels/laravel/405-method-not-allowed-laravel-55-api-passport-help的信息。但是可以通过在POST文件夹的VerifyCsrfToken文件中输入Middleware方法的URI来固定它,如下所示:

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

我仍然收到MethodNotAllowed错误.....这似乎开始很烦人,因为似乎没有答案在线。帮助!

1 个答案:

答案 0 :(得分:0)

显然,我在执行请求时缺少“ www”。

邮递员有以下内容:

mysite.com/api/login

但是我需要:

www.mysite.com/api/login

令人尴尬的新秀错误让我花了5天的时间来弄清楚...我希望这将对遇到相同问题的任何新Web开发人员有所帮助,以免他们像我一样浪费时间。