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.
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.
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 ...
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;
}
La fonction authorize () par défaut renvoie false, Return true, votre problème sera résolu