簡體   English   中英

Laravel授權()混淆

[英]Laravel Authorize() confusion

我目前正在將一個項目從CodeIgniter遷移到Laravel5。

我在Laracasts中看到,您可以在調用控制器之前使用Request::authorize()方法來授權訪問,並返回true或false。

這將(我認為)是理想的解決方案,因為我可以在請求中包含權限檢查,而不是通過權限檢查和重定向/響應污染控制器。

唯一的問題是,當我從authorize()返回false時,它只是加載一個帶有forbidden寫入的空白頁,我在laravel.com上找不到任何關於如何模板化的文檔(要么沒有文檔,要么我忽略了它)

我知道我可以編輯errors/404.blade.php的404頁面,但我無法弄清楚如何自定義403頁面,我試圖添加一個自定義的403.blade.php頁面,其中沒有得到顯示。 https://mattstauffer.co/blog/laravel-5.0-custom-error-pages

將這些權限檢查放在請求中是個好主意嗎? 或者我錯過了什么?

更新我從authorize()運行了一個回溯,它看起來像是拋出一個UnauthorizedException ,它擴展了RuntimeException 我試過在routes.php文件中捕獲它們,這兩個都不起作用。

我也試圖創建中間件,並從一個方法調用中間件,這也不起作用,因為中間件甚至根本沒有被調用。

更新2好的,所以我發現我只能從構造函數中調用$this->middleware() ,而不是單個方法,這是進步,我猜。

我所做的是為Request抽象類添加一個forbiddenResponse()方法。 您可以從該方法返回響應對象以呈現人類可讀錯誤。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\JsonResponse;

abstract class Request extends FormRequest {

    public function forbiddenResponse()
    {
        return new JsonResponse('Unauthorized', 403);
        // or return Response::make('Unauthorized', 403);
    }
}

檢查app\\Exceptions\\Handler.php文件。 您可以在這里自定義異常處理。

403錯誤啟動HttpException 默認情況下,Laravel將查看您的resources\\views\\errors\\目錄下的內容,並嘗試查找與相同狀態代碼對應的視圖。 由於您已經說過在該文件夾中創建了一個名為403.blade.php文件,因此它應該呈現此頁面403錯誤。

最后一點,如果您有任何錯誤的默認行為,請記得檢查您的Web服務器配置文件(Apache的httpd.conf ,Nginx的sites-available\\your-host )。 如果你正在使用Homestead,你可以查看Nginx配置文件,查看error_page 404 /index.php; ,注釋該行並重新啟動該服務。 這不是理想的情況,但通常有效。

覆蓋表單請求對象中的方法

class CreateUserRequest extends FormRequest {

    public function forbiddenResponse(){
        return abort(403);

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM