iT邦幫忙

0

laravel route設定post後如何避免用戶直接訪問此url

  1. 現在有一個route限制為ajax且是post才能訪問
Route::post('news/is_display', 'NewsController@is_display');
  1. 透過ajax post方式訪問是正常的,但直接網址訪問這個route會出現error 405
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
The GET method is not supported for this route. Supported methods: POST.
  1. 目前使用中介層還是無法解決我的問題,又或者是方式使用錯誤呢?
namespace App\Http\Middleware;

class OnlyAjax
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, \Closure $next)
    {
        if (!$request->ajax()) {
            return response('Forbidden.', 404);
        }
        
        return $next($request);
    }
}
  1. 想請問還有沒有其他方法可以避免這個route被用戶使用網址直接訪問?

麻煩各位了,謝謝。

2 個回答

3
dragonH
iT邦大師 1 級 ‧ 2019-07-15 09:43:23
最佳解答

我對 laravel 只有略懂的程度

說錯不要罵我/images/emoticon/emoticon02.gif

1 .

現在有一個route限制為ajax且是post才能訪問

是 因為此 route 的 method 為 post

2 .

透過ajax post方式訪問是正常的,但直接網址訪問這個route會出現error 405

你所謂的網址直接訪問應該是指 GET

那這樣的話很正常

因為此 route 只有定義 post

所以當然會 return 405 (method not allow)

也就是不支援的 method


所以你的問題是什麼?/images/emoticon/emoticon19.gif

你是想要

1 .

不想讓 user 看到預設的那個 error page

2 .

想把 method not allow 的 exception

全部 redirect 404


1 .

根據 官方文件

想自訂義 http error page

例如 405

可以在以下路徑建立一個 405.blade.php

resources/views/errors/405.blade.php

這樣一旦 response code 為 405

就會回傳此頁

2 .

想把 method not allow 的 exception

全部 redirect 404 的話

根據這篇

在 App\Exception handler.php 的 render function

加上

    if($exception instanceof \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException){
      return abort('404');
    }

這樣所有的 http request exception

就會全部 response 404

程式狗 iT邦新手 4 級 ‧ 2019-07-15 10:31:00 檢舉

感謝解答

0
firecold
iT邦新手 4 級 ‧ 2019-07-15 10:23:55

標題要的
跟你說的狀況不是符合嗎

"laravel route設定post後如何避免用戶直接訪問此url"
內文提到post正常get不行

使用網址直接訪問就是get阿
還是你說的避免直接訪問是要自動跳轉404page

程式狗 iT邦新手 4 級 ‧ 2019-07-15 10:31:05 檢舉

感謝解答

我要發表回答

立即登入回答