Laravel Dusk-如何确定浏览器的登录身份?

时间:2019-11-06 02:33:24

标签: laravel phpunit laravel-dusk

我有一个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上,因此在5.4中不可用的情况下,我将assertPathIs用作assertUrlIs,这确认我重定向到了正确的文档。

            $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 :(得分:0)

是的,有: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);
        });
    }
}