Laravel Dusk - как мне определить, кто вошел в браузер? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть система Laravel, которая позволяет людям проходить аутентификацию, щелкая URL-адрес, содержащий маркер входа в систему. Это облегчает удобный доступ на мобильных устройствах без необходимости управлять паролями.

Я создал модель с именем App\LoginTokens и маршрут web.php:

Route::get('/arbitraryprefix/{tokenCode}','LoginTokenController@loginWithTokenAndRedirect')

Этот метод контроллера проверяет токен и, если он действителен, регистрирует пользователя, используя \Auth::loginUsingId($loginToken->user_id) и перенаправляет на URL токена $loginToken->url.

. Очевидно, существуют другие меры безопасности (включая истечение срока действия токена и правила, обеспечивающиеаутентифицируемый пользователь относится к одному конкретному классу, который не имеет большого доступа в системе.

Я пишу несколько тестовых примеров в Laravel Dusk и хочу убедиться, что токен регистрирует пользователя в качестве правильного пользователя.

Моя система работает на Laravel 5.4, поэтому я использую assertPathIs в качестве assertUrlIs в недоступном для 5.4, и это подтверждает, что я перенаправляю на правильный документ.

            $this->browse(function ($browser) use ($loginToken,$oneClientUser) {
                $browser->visit('/logout')
                ->waitForText('Login')
                ->visit($loginToken->getLoginAndRedirectUrl())
                ->waitForText($oneClientUser->name)// the users name shows in top right when they are logged in.
                ->assertPathIs(parse_url($loginToken->url,PHP_URL_PATH))
                ->visit('/logout')
                ->waitForText('Login');
            });

Я хочуподключите к браузеру вызов типа

$browser->assertUserIs($oneClientUser)

, но мне пришлось согласиться на проверку их имени пользователя, которое отображается для аутентифицированных пользователей.

Есть ли способ проверить, какого пользователя я аутентифицирую, как при $this->browse(function($browser){ --here--}) обратном вызове?

1 Ответ

0 голосов
/ 06 ноября 2019

Да, есть: assertAuthenticatedAs()

use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use App\User;

class AuthTestExample extends DuskTestCase
{
    use DatabaseMigrations;

    protected $user

    public function setUp(): void
    {
        parent::setUp();
        $this->user = factory(User::class)->create(['password' => bcrypt('password')]);
    }

    public function tearDown(): void
    {
        $this->browse(function (Browser $browser) { $browser->logout(); });
        parent::tearDown();
    }

    public function testLogin()
    {
        $this->browse(function (Browser $browser) {
            $browser->assertGuest()
                    ->visit('/login')
                    ->type('@login', $this->user->login)
                    ->type('@password', 'password')
                    ->click('@login-button')
                    ->assertPathIs('/dashboard')
                    ->assertAuthenticatedAs($this->user);
        });
    }
}
...