web-dev-qa-db-fra.com

Laravel 5.2: POST la requête renvoie toujours "Méthode 405 non autorisée"

Je développe donc une API avec Laravel 5.2 et je suis confronté à un problème important.

J'ai un UserController qui va gérer les utilisateurs de mon application.

Ceci est mon fichier routes.php:

Route::group(array('prefix' => 'api/v1'), function() {    
   Route::post('user', 'UserController@store');
});

Et j'ai mon UserController défini comme ça:

class UserController extends Controller {

   public function index() {
       return 'Hello, API';
   }

   public function create(){
   }

   public function store(Request $request) {
       $user = new User;
       $user->email = $request->email;
       $user->password = $request->password;
       $user->fbId = $request->fbId;
       $user->ggId = $request->ggId;
       $user->firstName = $request->firstName;
       $user->lastName = $request->lastName;
       $user->imageUrl = $request->imageUrl;
       $user->country = $request->country;
       $user->mobile = $request->mobile;
       $user->gender = $request->gender;
       $user->client = $request->client;

       $user->save();

       return Response::json(array(
           'error' => false,
           'userId' => $user->id),
           200
       );
   }

   public function update(Request $request, $id) {
   }
}

Et ceci est la sortie de php artisan route:list

+--------+--------+-------------+------+-------------------------------------------+------------+
| Domain | Method | URI         | Name | Action                                    | Middleware |
+--------+--------+-------------+------+-------------------------------------------+------------+
|        | POST   | api/v1/user |      | App\Http\Controllers\UserController@store | web        |
+--------+--------+-------------+------+-------------------------------------------+------------+

J'utilise Postman pour tester mes POST requêtes. Chaque fois que je fais une demande POST à/api/v1/user, l'erreur "405 Method Not Allowed" est générée.

Est-ce que j'ai manqué quelque chose? 

Y a-t-il quelque chose que je devrais faire pour résoudre ce problème?

3
Joseph El Khoury

J'ai le même problème avec vous, qui est déjà défini dans mon POST route, par exemple "/ api/v1/user",

et lorsque j'essaie de me connecter à l'aide de POSTMAN (application pour tester l'API), la méthode 405 n'est pas autorisée, 

et puis je me rends compte que l'URL qu'on m'a envoyé utilise 'http'et après je le change en'https'(avec le' s 'à l'arrière) 
alors mon API fonctionne normalement!

normalement, si nous interagissons avec un serveur différent, nous devons utiliser 'https
mais si votre application sur le même serveur, 
c'est bien d'utiliser 'http'

La vraie raison de mon cas est que toute interaction avec un serveur différent doit être utilisée »https'(Ceci est la configuration sur mon serveur)

10
bathulah mahir

Vous devez séparer vos itinéraires car tous les utilisateurs essayant d’obtenir vos itinéraires ont besoin d’une session ouverte

Essaye ça

Route::group(array('prefix' => 'api/v1'), function() {

    Route::post('/','UserController@store');

    Route::get('/', 'UserController@index');

    Route::group(array('before' => 'auth.basic'), function() {

        Route::post('{user}', 'UserController@update');

    });
});

Les itinéraires de vos utilisateurs autorisés doivent figurer dans le deuxième groupe.

Et votre méthode 405 non autorisée est $user->id changez-la pour $request->user()->id

6

Passer à https le fera fonctionner. Au moins, c'est ce que j'ai vécu. Utiliser POSTman avec http a toujours cet effet.

0
anabeto93

Face à quelque chose de similaire avant, après le débogage, c’est le problème de Postman et rien n’est lié au code!

Alors ouvrez votre terminal et essayez de faire la même demande avec curl:

curl -X POST -H "Accept: application/json" -F "[email protected]" -F "password=secret" -F "firstName=Mahmoud"  -F "lastName=Zalt" ....... "http://your-domain.com/api/v1/user"

Si cela fonctionne, vous devez modifier quelques paramètres avec Postman lui-même. Je ne me souviens vraiment pas de ce que j'ai fait! Mais c'est quelque chose d'aussi simple que de changer certains en-têtes par défaut ou de supprimer le type d'autorisation ...

0
Mahmoud Zalt

Si cela aide quelqu'un, j'ai exactement le même problème. pour une raison quelconque, une combinaison de choses l'a corrigé.

  1. Le point évident était qu’il renverrait un NotFoundHttpException in RouteCollection.php line 161 car j’envoyais pas mon "api_token" dans ma demande de publication.
  2. Pour une raison quelconque (je ne sais pas si cela a fait une différence), mais chaîner mon middleware a fonctionné au lieu de le placer dans la Route: le groupe que j'ai fait;

    Route::group(['prefix'=>'api/v1'], function () {
        Route::post('/', 'IndexController@index')->middleware('auth:api');
    });
    
0
Robert Pounder

Après de longues heures à creuser et creuser, je n’ai trouvé aucune solution à mon problème.

Je devais créer un nouveau projet Laravel et créer tout ce que j'avais dans mon ancien projet. À ma grande surprise, tout fonctionnait parfaitement et je ne comprends toujours pas pourquoi!

Quoi qu’il en soit, merci à tous ceux qui ont essayé d’aider :) À la vôtre!

0
Joseph El Khoury

Cette erreur peut également être provoquée par un corps de requête trop volumineux. Dans mon cas, j'envoyais accidentellement un objet avec de nombreux sous-objets qui avaient tous beaucoup d'autres sous-objets. L'élagage des données de ma demande a résolu le problème.

0
mopo922