Laravel Страница просрочена 419 - PullRequest
1 голос
/ 06 февраля 2020

У некоторых новичков Дело:

У меня есть форма для загрузки видео с диска, и когда я загружаю с нее видео, загрузка видео занимает много раз. после загрузки fini sh возвращается время истечения 419.

, поэтому я предполагаю, что csrf_token изменился уже при загрузке видео, поэтому csrf не совпадает и возвращает 419 (?)

я уже делаю некоторые тесты, такие как:

  • изменить App \ Http \ Middleware \ VerifyCsrfToken на защищенный $ execpt и добавил ссылку на сообщение, срок действия не истек, но он возвращает новую проблему с нет отправленные данные отправлены.

  • Я думал об обновлении div {{csrf_token ()}} каждую x секунду с jquery, но я думаю, что это вызовет у меня еще одну проблему.

Это моя форма

<form method="POST" action="/video/insert" enctype="multipart/form-data">
            {{csrf_field()}}
                <div class="form-group">
                    <label for="judul">Judul</label>
                    <input name="judul" type="text" class="form-control" id="judul" placeholder="Input judul">
                </div>
                <div class="form-group">
                    <label for="informasi">Informasi</label>
                    <input name="informasi" type="text" class="form-control" id="informasi" placeholder="Input informasi">
                </div>
                <div class="form-group">
                    <label for="link">Link</label>
                    <input name="link" type="file" class="form-control-file" id="link" placeholder="Input Link">
                </div>
                <div class="form-group" hidden="">
                    <label for="status"></label>
                    <input name="status" type="text" class="form-control" id="status" placeholder="Input status" value="Tidak Aktif">
                </div>
                <div class="form-group" hidden="">
                    <label for="outletstatus"></label>
                    <input name="outletstatus" type="text" class="form-control" id="outletstatus" placeholder="Input outletstatus" value="Tidak Aktif">
                </div>
                <div class="form-group" hidden="">
                    <label for="type"></label>
                    <input name="type" type="text" class="form-control" id="type" placeholder="Input type" value="Server">
                </div>
                <div class="form-group" hidden="">
                    <label for="user_id"></label>
                    <input name="user_id" type="text" class="form-control" id="user_id" placeholder="Input user_id" value="{{auth()->user()->id}}">
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-primary">Upload</button>
                </div>
            </form>

Веб. php согласно этой проблеме

Route::group(['middleware'=>['auth','checkRole:Admin,Pengguna']],function()
{   // Video Controller
    Route::post('/video/insert','VideoController@insert');
});

Контроллер:

public function insert(Request $request){
    $video = \App\Video::create($request->all());
    function getName($n) { 
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
        $randomString = ''; 

        for ($i = 0; $i < $n; $i++) { 
            $index = rand(0, strlen($characters) - 1); 
            $randomString .= $characters[$index]; 
        } 

        return $randomString; 
    } 

    if($request->type=='Server'){
        $videoName = getName(10) . $request->file('link')->getClientOriginalName();
        $request->file('link')->move('videos/',$videoName);
        $video->link = $videoName;     
    }
    else{
        $video->link = 'https://www.youtube.com/embed/'.$request->link;
    }
    $video->type = $request->type;
    $video->save();
    return redirect('video')->with('status','Video berhasil ditambahkan!');
}

мой вопрос:

есть ли шанс, что мы отправим токен csrf после загрузки видео? значит, срок действия csrf еще не истек, и у вас, ребята, есть какие-нибудь рекомендации или какой-нибудь лучший способ решить эту проблему?

Спасибо.

Ответы [ 5 ]

1 голос
/ 06 февраля 2020

Еще одна вещь, которая может быть решением в дополнение к другим, которые ответили, это изменить

upload_max_filesize = 70M  post_max_size = 60M  memory_limit = 50M

в php.ini файле. И проверьте connection_timeout настройки в веб-сервере тоже.

1 голос
/ 06 февраля 2020

Увеличьте время жизни вашего сеанса в config / session. php

'lifetime' => env('SESSION_LIFETIME', 120),

'expire_on_close' => false,
0 голосов
/ 06 февраля 2020

пробовали ли вы подстановочный знак в защищенном $, кроме переменной с протоколом

'http://www.example.com/video-uploader/*'

https://laravel.com/docs/5.8/csrf#csrf -exexключ-uris

0 голосов
/ 06 февраля 2020

Проверьте, открыта ли какая-либо другая форма, прежде чем закрыть ее.

0 голосов
/ 06 февраля 2020

Использование @csrf insted из {{ csrf_field() }}

<form method="post">
<input name="_token" type="hidden" value="{{ csrf_token() }}"/>
... rest of form ...
</form>
...