Laravel: проверить ajax запрос - PullRequest
0 голосов
/ 05 мая 2020

В моем приложении laravel я загружаю формы через запрос ajax. Мне нужно проверить, чтобы каждый метод, например create и edit, был только ajax request. Но если они вызываются через get, они должны быть перенаправлены с сообщением об ошибке.

Я использую следующий код. Он работает нормально, но я должен написать его для каждого метода, который мне нужно защитить.

SomeController. php, AnotherController. php, AgainAnotherController. php, ...:

public function create()
{
    if(!request()->ajax())
    {
        # setting error message
        session()->flash('warning', 'Invalid request method or method not allowed');

        # redirecting
        return redirect()->route("admin.dashboard");
    }

    ...
}

public function edit()
{
    if(!request()->ajax())
    {
        # setting error message
        session()->flash('warning', 'Invalid request method or method not allowed');

        # redirecting
        return redirect()->route("admin.dashboard");
    }

    ...
}

Есть ли способ проверить указанные методы для каждого контроллера в приложении ..?

Ответы [ 4 ]

1 голос
/ 05 мая 2020

В вашем контроллере. php __construct добавьте следующее:

public function __construct ()
{
    $ajaxMethods = ['insert', 'update'];

    $currentActionMethod = Route::getCurrentRoute ()->getActionMethod ();

    if ( in_array ( $currentActionMethod, $ajaxMethods ) AND ! request ()->ajax () )
    {
        return redirect ()->back ()->with ( 'warning', 'Invalid request method or method not allowed' );
    }
}

Или Создайте промежуточное ПО

public function handle($request, Closure $next)
{

    $ajaxMethods = ['insert', 'update'];

    $currentActionMethod = Route::getCurrentRoute ()->getActionMethod ();

    if ( in_array ( $currentActionMethod, $ajaxMethods ) AND ! request ()->ajax () )
    {
        return redirect ()->back ()->with ( 'warning', 'Invalid request method or method not allowed' );
    }

    return $next($request);
}
0 голосов
/ 06 мая 2020

Спасибо @OmerYILMAZ и другим, кто помог, вот мой последний код ...

app \ Http \ Middleware \ AllowedAjaxRequests. php:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Route;

class AllowedAjaxRequests
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        # variables
        $ajaxMethods   = ['create', 'update'];
        $currentAction = Route::getCurrentRoute()->getActionMethod();

        # validating request method
        if (in_array($currentAction, $ajaxMethods) && !$request->ajax())
        {
            # setting error message
            session()->flash('warning', 'Invalid request method or method not allowed');

            # redirecting
            return redirect()->route("admin.dashboard");
        }

        return $next($request);
    }
}

app \ Http \ Kernel. php:

class Kernel extends HttpKernel
{
    ...

    protected $routeMiddleware = [
        ...

        'ajaxRequests' => \App\Http\Middleware\AllowedAjaxRequests::class,
    ];

    ...
}

routes \ web. php:

Route::middleware(['ajaxRequests'])->group(function() {
    ...
});
0 голосов
/ 05 мая 2020

один способ добавить его к своему помощнику, поэтому единственное, что вам нужно, это сначала создать метод проверки в своем помощнике. php, затем определить его в разделе автозагрузки в вашем composer. json и фини sh. вызовите свою функцию где угодно. дайте мне знать, если вам нужен пример или у вас есть вопрос

0 голосов
/ 05 мая 2020

Попробуйте использовать промежуточное ПО, проверьте его и вызовите промежуточное ПО в конструкторе контроллера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...