2017-02-13 2 views
3

Ich habe eine Anwendung mit Laravel 5.3 erstellt und es funktioniert auf localhost in Ordnung, aber nachdem ich alle auf einem Server meinen Code uploded habe ich diesen Fehler:Httpexception in handler.php Linie 133: Diese Aktion ist nicht autorisierte

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

Das passiert, wenn ich versuche, Funktionen in meinen Controllern per Post aufzurufen.

Dies ist ein Beispiel:

Strecke

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

-Controller

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

Wie kann ich dieses Problem beheben? Warum passiert das nicht auf meinem localhost?

Vielen Dank im Voraus.

+0

Ich bin nicht sicher, warum die Funktion Ihres Controllers Zugriffsmodifizierer "geschützt" hat. Versuchen Sie, das öffentlich zu machen und zu sehen, was passiert. Der Grund, warum etwas lokal arbeitet, aber nicht auf remote host 9/10 für mich funktioniert, war Cache (versuchen Sie es mit php artisan cache: Löschen Sie lokal und schauen Sie, ob es noch funktioniert). – peaceman

+0

Hallo Peaceman, danke für deine Antwort, aber nichts von dem oben Gesagten funktionierte für mich. – Kvnamo

+3

Aus meiner Forschung 'Diese Aktion ist nicht autorisiert. 'erscheint, wenn Sie versuchen, auf eine Ressource zuzugreifen, für die Sie nicht über ausreichende Zugriffsrechte verfügen. Was in Ihrer benutzerdefinierten Anforderung (AnsweringRequest) geschieht, geben Sie von der authorize-Methode false zurück. – peaceman

Antwort

0

Nun, für das, was ich gesehen habe, kann es für dieses Szenario viele Situationen geben. In meinem Fall verwendete ich eine benutzerdefinierte Formularanforderung mit dem Namen AnsageRequest. In dieser Klasse habe ich nach einer Rolleneigenschaft für den Auth-Benutzer gesucht.

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

    return false; 
} 

Mein Fehler war, === statt == für die Validierung zu verwenden. Also nach der Reparatur funktioniert alles gut. Wie dem auch sei

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

    return false; 
} 

warum hat es funktionierte auf localhost aber nicht auf dem Server bleibt ein Rätsel für mich ...

+1

Für Ihre freundlichen Informationen, sollten Sie @peaceman gesagt haben, seinen Kommentar als eine Antwort eher als Ihre eigenen zu schreiben ..! –

+0

Sie haben absolut Recht, @BasheerAhmedKharoti. Derselbe Fehler in meinem Code wurde mit dem Peaceman-Vorschlag korrigiert. – shahsani

26

Überprüfen Sie, ob Ihre AnnouncementRequest Datei festgelegt wird von authorise Funktion true zurück. Der Standardwert ist false.

Verwandte Themen