Laravel Запрещенный доступ при использовании Ajax - PullRequest
0 голосов
/ 16 июня 2020

Я установил fre sh Laravel приложение с аутентификацией. Я использую ларагон. Страницы входа, регистрации и сброса пароля работают нормально. Я создал контроллер профиля, чтобы пользователь мог редактировать профиль. Однако при отправке формы через Ajax я получаю Forbidden - You don't have permission to access / / /profile/edit_profile on this server..

         class ProfileController extends Controller
            {
                //

                function index()
                {
                    return view('profile.index');
                }

                function edit_profile(Request $request)
                {
                    $txt_midname = $request->input('txt_midname');
                    $txt_firstname = $request->input('txt_firstname');
                    $txt_lastname = $request->input('txt_lastname');
                    $extname = $request->input('extname');
                    $user = Auth::user();
                    $user->firstname = $txt_firstname;
                    $user->midname = $txt_midname;
                    $user->lastname = $txt_lastname;
                    if ($user->save()) {
                        return 'ok';
                    }
                }

            }

Вот и маршрут:

Route::post('/profile/edit_profile', 'ProfileController@edit_profile')->name('edit_profile');

и вид:

            $('#btn_update').on('click', function() {
                var btn_text = $('#btn_update').text();
                var txt_firstname = $.trim($('#txt_firstname').val());
                var txt_midname = $.trim($('#txt_midname').val());
                var txt_lastname = $.trim($('#txt_lastname').val());
                var extname = $.trim($('#extname').val());

                $.post(baseUrl + '/profile/edit_profile', {
                    '_token': token,
                    'txt_midname': txt_midname,
                    'txt_firstname': txt_firstname,
                    'txt_lastname': txt_lastname,
                    'extname': extname
                }, function(data) {
                    if (data == 'ok') {
                        window.location.reload();
                    }
                })
            })

enter image description here

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вам необходимо ввести токен csrf в ваш запрос.

$.post({
  headers: {
    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
  },
  url: '/admin/gallery/create/ajax',
  data: {}, 
  method: 'POST',
  success: function(response) {
  },
  error: function(error) {
  }
})

или, если вы хотите, чтобы каждый запрос ajax вставлял токен csrf, вы также можете сделать это.

$.ajaxSetup({
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
  }
});
0 голосов
/ 17 июня 2020

Это была моя ошибка. Проблема в моем baseUrl в javascript. Это должно быть var baseUrl = "{{url('')}}"; вместо var baseUrl = '{{url('')}}';

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