Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

フロント>会員情報編集でバリデーションエラー発生後にログアウトされる #6103

Closed
dotani1111 opened this issue Feb 27, 2024 · 4 comments
Milestone

Comments

@dotani1111
Copy link
Contributor

dotani1111 commented Feb 27, 2024

概要(Overview)

フロントの会員情報編集でバリデーションエラー発生後にログインセッションが切れます。

再現手順(Procedure)

1.バリデーションエラーを発生させる
2.再度、登録ボタンをクリック(画面遷移する)
3.ログイン画面に戻される。

環境(Environment)

EC-CUBE: 4.2.3, 4.2.2
PHP: 8.1.26

Symfony:5.4. 6.4

@dotani1111 dotani1111 added the bug label Feb 27, 2024
@dotani1111 dotani1111 added this to the 4.3.0 milestone Feb 27, 2024
@dotani1111
Copy link
Contributor Author

dotani1111 commented Mar 4, 2024

ちょっと調査してみました。
この部分でエラーが発生しているようです。
https://github.com/symfony/symfony/blob/1f386a39aeb83a1b37bba008ba42061901dc5d45/src/Symfony/Component/Security/Http/Firewall/AccessListener.php#L125

編集画面でPOSTする際に、Tokenが設定されていませんでした。
通常時だとUsernamePasswordTokenがあるのですが、エラー発生時はNullTokenとなっていました。

その際のログを見てました。
以下のログにWHERE t0.email = ? で検索しているところに、エラーが発生した際のメールドレスが入っていました。

Executing statement: SELECT t0.id AS id_1, t0.name01 AS name01_2, t0.name02 AS name02_3, t0.kana01
  AS kana01_4, t0.kana02 AS kana02_5, t0.company_name AS company_name_6, t0.postal_code AS
  postal_code_7, t0.addr01 AS addr01_8, t0.addr02 AS addr02_9, t0.email AS email_10, t0.phone_number
  AS phone_number_11, t0.birth AS birth_12, t0.password AS password_13, t0.salt AS salt_14,
  t0.secret_key AS secret_key_15, t0.first_buy_date AS first_buy_date_16, t0.last_buy_date AS
  last_buy_date_17, t0.buy_times AS buy_times_18, t0.buy_total AS buy_total_19, t0.note AS note_20,
  t0.reset_key AS reset_key_21, t0.reset_expire AS reset_expire_22, t0.point AS point_23,
  t0.create_date AS create_date_24, t0.update_date AS update_date_25, t0.customer_status_id AS
  customer_status_id_26, t0.sex_id AS sex_id_27, t0.job_id AS job_id_28, t0.country_id AS
  country_id_29, t0.pref_id AS pref_id_30, t0.discriminator_type FROM dtb_customer t0 WHERE t0.email
  = ? AND t0.customer_status_id = ? AND t0.discriminator_type IN ('customer') LIMIT 1 (parameters:
  {params}, types: {types})
--> {  }
--> extra: { url: /mypage/change, ip: 127.0.0.1, http_method: POST, server: '127.0.0.1:8000', referrer: 'https://127.0.0.1:8000/mypage/change', user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36', file: /Users/daichi_otani/dev/eccube4/ec-cube/vendor/doctrine/dbal/src/Logging/Statement.php, line: 95, class: Doctrine\DBAL\Logging\Statement, callType: '->', function: execute, uid: 43cf752, user_id: N/A, session_id: c24e1c59 }
___ ** WARNING ** ==> (!) SECURITY _________________________________________________________________
Username could not be found in the selected user provider.
--> username: null
--> provider: Eccube\Security\Core\User\CustomerProvider

「有効なメールアドレスではありません。」というバリデーションの場合のみ発生するようです。

@dotani1111
Copy link
Contributor Author

dotani1111 commented Mar 6, 2024

symfonyのlogout_on_changeという機能がキーになっている様です。
この機能がEC-CUBE4.2(正確にはSymfony5)から、デフォルトで有効になっている前提があります。

現在の処理では、情報変更時にメールアドレスのEntityを直接変更する処理があり、そこでログアウトの処理が走ってしまっている様です。

logout_on_changeについて
https://symfony.com/doc/4.x/components/security/authentication.html

@dotani1111
Copy link
Contributor Author

使用済みのメールアドレスを登録した際にも、同様の現象が確認できました。

@dotani1111 dotani1111 changed the title フロント>会員情報編集でバリデーションエラー発生後にログインセッションが切れる フロント>会員情報編集でバリデーションエラー発生後にログアウトされる Mar 7, 2024
@chihiro-adachi
Copy link
Contributor

#6110 で修正
#6110

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants