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

Member Entity拡張後に特定の操作をすると管理画面にログインできなくなる #4725

Closed
sw-satoshi-nakano opened this issue Oct 7, 2020 · 9 comments
Milestone

Comments

@sw-satoshi-nakano
Copy link
Contributor

sw-satoshi-nakano commented Oct 7, 2020

概要(Overview)

Member Entity拡張後に特定の操作をすると管理画面にログインできなくなりました。

期待する内容(Expect) or 要望 (Requirement)

ログインできるようにしたい。

再現手順(Procedure)

  1. Entity拡張する
  2. 管理画面 -> メンバー管理 -> ユーザーの修正をする
  3. その後、他のページを表示しようとするとエラーが発生する

"There is no user provider for user "Proxies\CG\Eccube\Entity\Member". Shouldn't the "supportsClass()" method of your user provider return true for this classname?"

おそらく、以下の箇所でセットしたMemberオブジェクトが「Eccube\Entity\Member」ではなくProxyで生成されたオブジェクトになっているからでは?

$this->tokenStorage->getToken()->setUser($LoginMember);

以下の箇所をMemberのサブクラスであればtrueを返すように修正したら、エラーは解消した。

return Member::class === $class || is_subclass_of($class,Member::class);

return Member::class === $class;

環境 (environment)

  • EC-CUBE: 4.0.4 , 4.0.5
  • PHP: 7.3.22
  • DB:
    • MySQL 5.7

関連情報 (Ref)

symfony/symfony#35435

@sw-satoshi-nakano sw-satoshi-nakano changed the title Member Entity拡張後, Member Entity拡張後に特定の操作をすると管理画面にログインできなくなる Oct 7, 2020
@okazy okazy added this to the 4.0.x milestone Oct 7, 2020
@okazy
Copy link
Contributor

okazy commented Oct 7, 2020

@sw-satoshi-nakano

以下の手順で動作確認してみましたが、ログインできなくなる事象は確認できませんでした。
どこか手順が間違っていますでしょうか?

  1. Entity拡張する

app/Customize/Entity/MemberTrait.php ファイルを作成

<?php

namespace Customize\Entity;

use Eccube\Annotation\EntityExtension;

/**
 * Trait MemberTrait
 * @package Customize\Entity
 *
 * @EntityExtension("Eccube\Entity\Member")
 */
trait MemberTrait
{
    public $role;
}

proxy作成

bin/console e:g:p
gen -> /Users/hideki_okajima/temp/20201007/ec-cube-doc/app/proxy/entity/src/Eccube/Entity/Member.php
  1. 管理画面 -> メンバー管理 -> ユーザーの修正をする

メンバー管理にてログイン中のメンバーの「名前」と「ログインID」を変更

  1. その後、他のページを表示しようとするとエラーが発生する

管理画面ログアウト、ログイン

@sw-satoshi-nakano
Copy link
Contributor Author

@okazy
ご確認ありがとうございます。
再度、再現方法を詳細に確認しご提示いたします。
少しお時間をいただけないでしょうか。

@okazy
Copy link
Contributor

okazy commented Oct 7, 2020

ありがとうございます。

@sw-satoshi-nakano
Copy link
Contributor Author

@okazy

どうやらtraitで拡張したことが直接の原因では無いようでした。
以下のdoctrineのキャッシュファイルが出来た時に問題が発生することはわかりましたが、このファイルが出来るタイミングとメカニズムがよくわらず、原因の特定ができておりません。
このファイルはどういったことをすると出来るのか、ご存じでしたら教えてください。

var/cache/[dev or prod]/doctrine/orm/Proxies/__CG__EccubeEntityMember.php

@okazy
Copy link
Contributor

okazy commented Oct 19, 2020

@sw-satoshi-nakano
すみません、私もまだ理解できていないのですが、一旦わかったことを共有です。
#2546 にてproxyの生成についての調整が入っています。
インストール時に「Traitは利用されないがカラムは追加される」という状態になっており、この際に内部的に利用されているキャッシュではないかと思います。

処理 Plugin Trait カラム  
インストール 無効 利用されない 追加 Proxyは再生成されないスキーマは更新される

@okazy
Copy link
Contributor

okazy commented Oct 19, 2020

上記、動作を検証しましたが、EC-CUBEの独自実装のProxyはシステムの一時ファイル( /var/folders/ハッシュ/proxy_ハッシュ/src/Eccube/Entity/Product.php )に生成されていました。
var/cache/[dev or prod]/doctrine/orm/Proxies/__CG__EccubeEntityMember.php はDoctrine自体のProxy機構およびキャッシュではないかと思います。

@sw-satoshi-nakano
Copy link
Contributor Author

いただいた情報をもとに探ってみます。
ありがとうございます。

@okazy
Copy link
Contributor

okazy commented Oct 27, 2020

@sw-satoshi-nakano
こちらの問題のようですね。
symfony/maker-bundle#532

Doctrineを利用している場合にマイナーバージョンアップでも問題が発生しているようでした。
プルリクでいただいている変更内容で問題ないようです。

ドキュメントも修正されていますね。
symfony/symfony-docs#14304

okazy added a commit to okazy/ec-cube that referenced this issue Oct 27, 2020
@sw-satoshi-nakano
Copy link
Contributor Author

意図的に同じ状況を作ってエラーを発生させることが出来ずモヤモヤしておりますが、Symfonyの仕様に対応した。ということで納得することにします。ご対応ありがとうございました。

sw-satoshi-nakano pushed a commit to SpreadWorks/OSS_ec-cube that referenced this issue Apr 28, 2021
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

3 participants