Невозможно выполнить запрос Ajax в Laravel / Vue.Js - PullRequest
0 голосов
/ 23 октября 2018

Итак, я дошел до того, что начинаю биться головой об стену с этой проблемой, я пытался поискать в поиске решения, но на всех страницах просто говорится «Включить токен CSRF», который я включил..

Маршрут использует промежуточное программное обеспечение по умолчанию для веб-сайтов.

Токен CSRF включен

Я нахожусь на этом остроумие, так что любойРуководство высоко ценится.

Используя новейший Laravel 5.7, все компоненты обновлены

JS Сценарий:

<script>
export default {
    name: "BankIdLogin",
    data() {
        return {
            status: '',
            error: '',
            message: '',
        }
    },

    created() {

    },

    methods: {
        initiateBankID: function (e) {
            e.preventDefault();
            e.stopPropagation();
            axios
                .post(
                    "/login/bankIdAuthentication", {
                        _token: $('meta[name="csrf-token"]').attr('content'),
                        ssn: $('#ssn').val()
                    }
                )
                .then(res => res.json())
                .then(res => console.log(res));
        },
        collectBankID() {

        }
    }
}
</script>

Ответ на вызов:

{
   "message":"",
   "exception":"Symfony\\Component\\HttpKernel\\Exception\\HttpException",
   "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
   "line":204,
   "trace":[
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
     "line":176,
     "function":"prepareException",
     "class":"Illuminate\\Foundation\\Exceptions\\Handler",
     "type":"->"
  },
  {
     "file":"/var/www/html/app/Exceptions/Handler.php",
     "line":51,
     "function":"render",
     "class":"Illuminate\\Foundation\\Exceptions\\Handler",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":83,
     "function":"render",
     "class":"App\\Exceptions\\Handler",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":55,
     "function":"handleException",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php",
     "line":49,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\View\\Middleware\\ShareErrorsFromSession",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php",
     "line":63,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\Session\\Middleware\\StartSession",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php",
     "line":37,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php",
     "line":66,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\Cookie\\Middleware\\EncryptCookies",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":104,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
     "line":681,
     "function":"then",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
     "line":656,
     "function":"runRouteWithinStack",
     "class":"Illuminate\\Routing\\Router",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
     "line":622,
     "function":"runRoute",
     "class":"Illuminate\\Routing\\Router",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
     "line":611,
     "function":"dispatchToRoute",
     "class":"Illuminate\\Routing\\Router",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
     "line":176,
     "function":"dispatch",
     "class":"Illuminate\\Routing\\Router",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":30,
     "function":"Illuminate\\Foundation\\Http\\{closure}",
     "class":"Illuminate\\Foundation\\Http\\Kernel",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php",
     "line":65,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Barryvdh\\Debugbar\\Middleware\\InjectDebugbar",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/fideloper/proxy/src/TrustProxies.php",
     "line":57,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Fideloper\\Proxy\\TrustProxies",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
     "line":31,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
     "line":31,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
     "line":27,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php",
     "line":62,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":151,
     "function":"handle",
     "class":"Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
     "line":53,
     "function":"Illuminate\\Pipeline\\{closure}",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
     "line":104,
     "function":"Illuminate\\Routing\\{closure}",
     "class":"Illuminate\\Routing\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
     "line":151,
     "function":"then",
     "class":"Illuminate\\Pipeline\\Pipeline",
     "type":"->"
  },
  {
     "file":"/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
     "line":116,
     "function":"sendRequestThroughRouter",
     "class":"Illuminate\\Foundation\\Http\\Kernel",
     "type":"->"
  },
  {
     "file":"/var/www/html/public/index.php",
     "line":54,
     "function":"handle",
     "class":"Illuminate\\Foundation\\Http\\Kernel",
     "type":"->"
  }
   ]
}

web.php

Route::post('/login/bankIdAuthentication', 'Api\LoginController@bankidAuthentication');

BankIDController.php:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\BankidSignature;
use App\Models\User;
use Frozzare\Personnummer\Personnummer;
use ILabs\Api\BankId;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends BaseController
{
public function bankidAuthentication(Request $request)
{
    $ssn = Personnummer::format($request->post('ssn'), TRUE) ?? $request->post('ssn');
    if ($ssn === '')
        $ssn = $request->post('ssn');

    if ($ssn !== '') {
        $user = User::where(
            [
                'ssn'    => $ssn,
                'active' => 1,
            ]
        );
        if (!$user->count()) {
            return \GuzzleHttp\json_encode(['status' => 0, 'message' => __('INVALID_SSN')]);
        }

        $bankid = new BankId();

        try {
            $bankid->bankIDAuthenticationRequest($ssn);

            session(['ssn' => $ssn]);

        } catch (\Exception $e) {
            return \GuzzleHttp\json_encode(['status' => 0, 'message' => $e->getMessage()]);
        }
    }
    return \GuzzleHttp\json_encode(['status' => 0, 'message' => 'Unknown Error']);
}
}

РЕДАКТИРОВАТЬ Отключение CSRF в промежуточном веб-ПО обеспечивает правильную работу маршрута, поэтомуэто как-то связано с CSRF ...

Кажется, что _token, предоставленный функцией, не соответствует _token в сеансе (Не знаю, должны ли они совпадать или они связаны друг с другом в другомway) Пример:

_token from request: wiqBYqBdtMJL9JxInySSSBGtYzPGHAjePLNBILRz
_token in session: e5caPLy6N82QEQoUzixHAvojE2SortRKqxOFM3sI

Заголовки запроса

РЕДАКТИРОВАТЬ 2 После дополнительных исследований я пришел к выводу, что моя проблема в том, что вызовы Ajax, похоже, начинают свой собственный новый сеанс ... во многом как описано здесь Laracast - _tokenне совпадает с сеансом _token

Однако я не смог заставить его работать с любыми исправлениями, которые они поставили в этом потоке.

РЕДАКТИРОВАТЬ 3

Я больше не знаю, что происходит, я сделал коммит своих изменений и теперь он работает ..

1 Ответ

0 голосов
/ 23 октября 2018

На своей HTML-странице, откуда вы вызываете этот ajax, добавьте

var bankIdAuthenticationRoute = "{{route('bankIdAuthenticationRoute')}}"
var csrf = "{{csrf_token()}}"

, а затем используйте обе переменные в вашем файле JS для этого вызова Ajax.

...