web-dev-qa-db-fra.com

HttpException dans la ligne 133 de Handler.php: cette action n'est pas autorisée

J'ai créé une application en utilisant laravel 5.3 et cela fonctionne bien sur localhost mais après avoir mis à jour tout mon code sur un serveur, j'ai l'erreur

Symfony\Component\HttpKernel\Exception\HttpException in /home/project/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php line 133: This action is unauthorized.

Cela se produit lorsque j'essaie d'appeler des fonctions dans mes contrôleurs via post.

Voici un exemple:

Route

Route::group(['middleware' => 'auth'], function () {
    Route::group(['middleware' => 'admin'], function () {
         Route::post('admin/store/', 'Admin\AnnouncementController@store');
    });
});

Manette

protected function store(AnnouncementRequest $request) {
    return Auth::user()->id;
}

Comment puis-je réparer cela? Pourquoi est-ce que ceci ne se produit pas sur mon localhost?

Merci d'avance.

9
Kvnamo

Vérifiez que votre fichier AnnouncementRequest est défini pour renvoyer true à partir de la fonction authorize. La valeur par défaut est de retourner false.

34
user7830484

Eh bien, d'après ce que j'ai vu, il peut y avoir beaucoup de situations pour ce scénario. Dans mon cas, j'utilisais un FormRequest personnalisé nommé AnnouncementRequest . Dans cette classe, je cherchais une propriété de rôle sur l'utilisateur d'authentification.

// before
public function authorize() {
    if(Auth::user()->role_id === 1) {
        return true;
    }

    return false;
}

Mon erreur a été d'utiliser === à la place == pour la validation. Donc, après avoir résolu le problème, tout fonctionne bien. 

// after
public function authorize() {
    if(Auth::user()->role_id == 1) {
        return true;
    }

    return false;
}

Quoi qu'il en soit, pourquoi ça a fonctionné sur localhost mais pas sur le serveur reste un mystère pour moi ...

1
Kvnamo

Dans votre fichier de demande, les autorisations par défaut ne sont pas activées

public function authorize()
    {
        return false;
    }

si vous activez votre fichier de demande ici en affichant ce code.

public function authorize()
    {
        return true;
    }
0
Kumaravel K

La fonction authorize () par défaut renvoie false, Return true, votre problème sera résolu

0
Whisky Dollar