2017-02-13 4 views
3

Я создал приложение, использующее Laravel 5.3 и он работает отлично на локальном, но после того, как я uploded всего мой кода на сервере У меня есть эта ошибка:HttpException в handler.php линии 133: Это действие является несанкционированным

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

Это происходит, когда я пытаюсь вызвать функции в моих контроллерах, используя пост.

Это один пример:

Маршрут

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

Контроллер

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

Как я могу это исправить? Почему это не происходит на моем локальном хосте?

Заранее спасибо.

+0

Я не уверен, почему функция вашего контроллера имеет «защищенный» модификатор доступа. Попытайтесь изменить это на публике и посмотрите, что произойдет. Также причина, по которой что-то работает локально, но не работает на удаленном хосте 9/10 для меня, - это кеш (попробуйте кеш php artisan: очистите локально и посмотрите, работает ли он еще). – peaceman

+0

Привет, мир, спасибо за ваш ответ, но ни один из вышеперечисленных не работал для меня. – Kvnamo

+3

Из моего исследования «Это действие несанкционировано. 'появляется, когда вы пытаетесь получить доступ к ресурсу, к которому у вас недостаточно прав доступа. Что происходит в вашем пользовательском запросе (AnnouncementRequest), вы возвращаете false из метода authorize. – peaceman

ответ

0

Ну, для того, что я видел, для этого сценария может быть много ситуаций. В моем случае я использовал пользовательский FormRequest с именем AnnouncementRequest. Внутри этого класса я проверял свойство роли у пользователя auth.

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

    return false; 
} 

Моя ошибка заключалась в использовании === вместо == для проверки. Поэтому, после того, как все исправлено, все работает нормально.

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

    return false; 
} 

Во всяком случае, почему же он работал на локальном, но не на сервере остается загадкой для меня ...

+1

Для получения вашей информации, вы должны были сказать @peaceman, чтобы опубликовать свой комментарий как ответ, а не ваш собственный ..! –

+0

Вы абсолютно правы, @BasheerAhmedKharoti. Та же ошибка в моем коде была исправлена ​​с предложением Peaceman. – shahsani

26

Убедитесь, что ваш файл AnnouncementRequest установлен для возврата истинных от функции Авторизоваться. По умолчанию используется значение false.