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;
}
どうすれば修正できますか?ローカルホストでこれが発生しないのはなぜですか?
前もって感謝します。
AnnouncementRequest
ファイルが認証機能からtrueを返すように設定されていることを確認してください。デフォルトではfalseを返します。
検証に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;
}
}
デフォルト関数はfalseを返すため、以下に示すように変更します
public function authorize()
{
return true;
}
または、リクエストで認証を使用することもできます
use Illuminate\Support\Facades\Auth;
public function authorize()
{
return Auth::check();
}
さて、私が見たところでは、このシナリオには多くの状況があり得ます。私の場合、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;
}
とにかく、なぜローカルホストで動作したのにサーバーで動作しなかったのかは謎のままです...
リクエストファイルのデフォルトでは認証を有効にしない
public function authorize()
{
return false;
}
そのコードを示すリクエストファイルをここで有効にすると。
public function authorize()
{
return true;
}
Authorize()関数はデフォルトでfalseを返し、trueを返します。問題は解決されます