web-dev-qa-db-ja.com

Handler.php行133のHttpException:このアクションは許可されていません

laravel 5.3を使用してアプリケーションを作成し、localhostで正常に動作していますが、サーバー上のすべてのコードをアップロードした後、このエラーが発生します。

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

これは、postを使用してコントローラーで関数を呼び出そうとすると発生します。

これは一例です:

ルート

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

コントローラ

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

どうすれば修正できますか?ローカルホストでこれが発生しないのはなぜですか?

前もって感謝します。

10
Kvnamo

AnnouncementRequestファイルが認証機能からtrueを返すように設定されていることを確認してください。デフォルトではfalseを返します。

44
user7830484

検証にCustomRequestメソッドを使用できる場合、authorize()がtrueを返すことを確認してください。 falseを設定できる場合、関数を呼び出すこともエラーをスローすることはありませんこのアクションは不正です

溶液

class CopyRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
         return true;   //Default false .Now set return true;
    }
}
3

デフォルト関数はfalseを返すため、以下に示すように変更します

public function authorize()
    {
        return true;
    }

または、リクエストで認証を使用することもできます

use Illuminate\Support\Facades\Auth;
 public function authorize()
    {
        return Auth::check();
    }
1
sunshine

さて、私が見たところでは、このシナリオには多くの状況があり得ます。私の場合、AnnouncementRequestという名前のカスタムFormRequestを使用していました。そのクラス内で、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
Kvnamo

リクエストファイルのデフォルトでは認証を有効にしない

public function authorize()
    {
        return false;
    }

そのコードを示すリクエストファイルをここで有効にすると。

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

Authorize()関数はデフォルトでfalseを返し、trueを返します。問題は解決されます

0
Whisky Dollar