[Symfony5.4 → 6.4] RememberMeをCookieにセットしても認識されず、ログアウトしてしまう

実現したいこと

期待する動作

Symfony5.4からSymfony6.4へバージョンアップするために、現在非推奨である、"TokenBasedRememberMeServices"を削除し、新しいRememberMeの自動ログイン機能を実装しています。

発生している問題・分からないこと

問題

RememberMeの自動ログイン機能のE2Eテストで以下のようなコードを書いています。
下記コードのMyPage::newInstance($this->getRouter(), $driver);の処理でログインしてMyPageに遷移するのが正しいですが、ログアウトされて異なるページに遷移します。

なぜ機能しないのでしょうか?

該当のソースコード

php

1<?php2 3namespace Tests\Security;4 5use Facebook\WebDriver\Cookie;6use Facebook\WebDriver\Support\Events\EventFiringWebDriver;7use Symfony\Component\HttpFoundation\Request;8use Symfony\Component\HttpFoundation\RequestStack;9use Symfony\Component\Security\Core\Signature\SignatureHasher;10use Symfony\Component\Security\Http\RememberMe\ResponseListener;11use App\Entity\User;12 13class AutoLoginTest extends WebTestCase14 public function testAutoLogin(): void15 {16 // ユーザを取得17 18 $user = $this->registerUser();19 20 // RememberMeのハンドラ21 $handler = new SignatureRememberMeHandler(22 signatureHasher: static::getContainer()->get(SignatureHasher::class),23 userProvider: static::getContainer()->get(UserRepository::class),24 requestStack: $this->createConfiguredMock(25 RequestStack::class,26 ['getMainRequest' => $request = new Request()]27 ),28 options: [29 'name' => 'REMEMBERME',30 'lifetime' => 604800,31 ],32 );33 }34 // Cookie(RememberMe)を生成35 $handler->createRememberMeCookie($user);36 37 // E2Eテスト用のドライバを生成38 $driver = $this->createWebDriver;39 40 // 未ログインユーザ用のページオブジェクトを作成41 HomePage::newInstance($this->getRouter(), $driver);42 $cookie = Cookie::createFromArray(43 [44 'name' => 'REMEMBERME',45 'value' => $request->attributes->get(ResponseListener::COOKIE_ATTR_NAME)->getValue(),46 'path' => '/',47 'domain' => null,48 'expiry' => time() + 604800,49 'secure' => true,50 'httponly' => false,51 ]52 );53 $driver->manage()->addCookie($cookie);54 // -- ERROR -- ログインユーザ用のページオブジェクトを作成55 MyPage::newInstance($this->getRouter(), $driver);

yaml

1# security.yaml2remember_me:3 secret: secret 4 lifetime: 6048005 path: / 6 domain: ~7 name: REMEMBERME 8 signature_properties: ['username', 'password']

php

1<?php2 3namespace App\Security;4 5use Symfony\Component\PropertyAccess\PropertyAccess;6use Symfony\Component\Security\Core\Signature\SignatureHasher;7 8// SignatureHasherのFactory9class SignatureHasherFactory10{11 public static function create(array $signatureProperties): SignatureHasher12 {13 $propertyAccessor = PropertyAccess::createPropertyAccessor();14 15 return new SignatureHasher($propertyAccessor, $signatureProperties, 'secret');16 }17}

yaml

1# services.yaml2Symfony\Component\Security\Core\Signature\SignatureHasher:3 factory: ['App\Security\SignatureHasherFactory', 'create']4 arguments:5 - ['getUsername', 'getPassword']6 public: true

試したこと・調べたこと

上記の詳細・結果

以下を読みました
https://symfony.com/doc/current/security/remember_me.html#add-remember-me-support-to-custom-authenticators

補足

特になし

コメントを投稿

0 コメント