У меня есть система 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--})
?