Как я могу имитировать запрос с помощью сеанса, имеющего драйвер массива, чтобы я мог проверить свою защиту?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как я могу имитировать запрос с помощью сеанса, имеющего драйвер массива, чтобы я мог проверить свою защиту?

Сообщение Anonymous »


Я тестирую свою специальную защиту:

пространство имен Tests\Feature\Extensions; используйте Приложение\Модели\Клиент; используйте App\Extensions\CustomerUser; используйте Illuminate\Http\Request; используйте Illuminate\Foundation\Testing\RefreshDatabase; используйте Illuminate\Support\Facades\Auth; используйте Насмешку; используйте Тесты\TestCase; класс CustomGuardTest расширяет TestCase { используйте RefreshDatabase; публичная функция testAuthSuccess(): void { // Пароль по умолчанию 1234 $customer = CustomerUser::factory()->create(); $request = $this->app->make('request'); $guard = новый CustomGuard('customer_session', Auth::createUserProvider('customer'), $request); $authenticated = $guard->attempt(['email' => $customer->email, 'password' => '1234', 'user_id' => $customer->user_id]); $this->assertTrue($authenticated); } } Но при тестировании я получаю сообщение об ошибке:

Произошла 1 ошибка: 1) Тесты\Функция\Расширения\CustomerGuardTest::testAuthSuccess RuntimeException: хранилище сеансов не установлено по запросу. /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Request.php:560 /var/www/html/app/Extensions/CustomerGuard.php:13 /var/www/html/tests/Feature/Extensions/CustomerGuardTest.php:25 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:61 И я пытаюсь проверить, будет ли мой охранник аутентифицироваться с помощью моего адреса электронной почты, пароля и user_id, а если «Не указано», то пользователь не будет аутентифицирован.

Охранник такой:

пространство имен App\Extensions; используйте Illuminate\Auth\SessionGuard; используйте Illuminate\Contracts\Auth\UserProvider; используйте Illuminate\Http\Request; класс CustomGuard расширяет SessionGuard { публичная функция __construct($name, UserProvider $provider, Request $request) { родитель::__construct($name, $provider, $request->session(), $request); } попытка публичной функции (массив $credentials = [], $remember = false) { $user = $this->provider->getByCredentials($credentials); // Проверяем, существует ли полученный пользователь и правильный ли пароль if ($user && $this->provider->validateCredentials($user, $credentials)) { // Авторизуем пользователя $this->login($user, $remember); вернуть истину; } вернуть ложь; } } Принимая во внимание, что мой провайдер:

пространство имен App\Extensions; используйте Illuminate\Auth\EloquentUserProvider; используйте Illuminate\Contracts\Auth\Authenticatable в качестве UserContract; класс CustomeProvider расширяет EloquentUserProvider { общедоступная функция returnByCredentials (массив $credentials) { если (пусто($credentials) || (count($credentials) === 1 && array_key_exists('password', $credentials))) { вернуть ноль; } // Получение клиента по адресу электронной почты и user_id верните $this->createModel()->newQuery() ->where('электронная почта', $credentials['электронная почта']) ->where('user_id', $credentials['user_id']) ->первый(); } общедоступная функция validateCredentials (UserContract $customer, массив $credentials) { if(isset($credentials['user_id']) && (int)$customer->user_id==$credentials['user_id']){ return родитель::validateCredentials($customer,$credentials); } вернуть ложь; } } Знаете ли вы, как исправить ошибку? Я хочу убедиться, что моя защита работает, чтобы я мог быть уверен, что смогу применить ее на своих маршрутах.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»