質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

Q&A

解決済

2回答

8898閲覧

ECCUBE4で、ログインボタン押下後、どこの処理を通ってログイン処理が走るのか教えてほしい

fujisawa08

総合スコア9

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

EC-CUBE

EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

1グッド

0クリップ

投稿2020/07/03 08:10

###実現したいこと
別の処理を介して、フロントの既存ログイン処理(ユーザ認証・カートのマージなど)を行いたい

###教えてほしいこと
フロントのログインフォームで、ログインボタン押下後、どこの処理を通ってログイン処理が走るかがわかれば、実現できると考えているので、教えていただきたい
###調査したこと
・ログインフォームで下記のタグがあり、ログインボタンでsubmitすると action="/mypage/login" に遷移する

src\Eccube\Resource\template\default\Mypage\login.twig

1<form name="login_mypage" id="login_mypage" method="post" action="{{ url('mypage_login') }}">

・しかし、遷移先に該当するのは、下記のログインフォーム表示メソッドであり、なぜログイン処理につながるか不明

src\Eccube\Controller\Mypage\MypageController.php

1 /** 2 * ログイン画面. 3 * 4 * @Route("/mypage/login", name="mypage_login") 5 * @Template("Mypage/login.twig") 6 */ 7 public function login(Request $request, AuthenticationUtils $utils) 8 {

・カート情報を結合するメソッドmergeFromPersistedCart を呼んでいることから、ログイン処理にonInteractiveLoginが使われているのだろうと推測

src\Eccube\EventListener\SecurityListener.php

1public static function getSubscribedEvents() 2 { 3 return [ 4 SecurityEvents::INTERACTIVE_LOGIN => 'onInteractiveLogin',

・INTERACTIVE_LOGIN を検索すると、Symfony内で定義されているEventのようだが、EventListenerの知識が浅く、ここからどう遡ればログインボタンにたどり着くのか、上手く処理を差し込めるのかがわからず

nakio👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

回答ありがとうございます、大変参考になりました
今回は下記のような実装にすることにしました

php

1 $token = new UsernamePasswordToken($customer, null, 'customer', array('ROLE_USER')); 2 $this->tokenStorage->setToken($token); 3 4 $loginEvent = new InteractiveLoginEvent($request, $token); 5 $this->eventDispatcher->dispatch( 6 SecurityEvents::INTERACTIVE_LOGIN, $loginEvent);

投稿2020/07/21 10:21

fujisawa08

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ログイン処理自体は、 Symfony Security-Bundle を使用しております。
定義は app/config/eccube/packages/security.yaml に記載されています。
PHPのプログラムは vendor/symfony/security-bundle や vendor/symfony/security に置かれています。
どのような処理を追加したいかによりますが、 src/Eccube/Security/Http/Authentication あたりのプログラムを拡張してあげれば良いかと思います

投稿2020/07/17 00:29

nanasess

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fujisawa08

2020/07/21 01:25

回答ありがとうございます 言い忘れていましたが、プラグインでの実装となるので、既存ファイルの拡張はできない認識です 処理としては、下記のイメージです ・フロント>ログイン(カートからのログイン) に、別サービスのAPIを経由するログインボタン設置 ・ボタン押下後、別サービスとECCUBEの登録情報の紐付けができていれば、マイページログイン →上記まではできているのですが、カート情報がマージされず、手の入れ方もわからず困っている状態です なるべくECCUBE既存の処理を使いたいので、通常のログイン処理のフローに乗せたく、処理を追っている状態です
nanasess

2020/07/21 01:32 編集

src/Eccube/Security/Http/Authentication のプログラムをプラグイン側で継承して、app/config/eccube/packages/security.yaml の定義をプラグイン側のクラス名に変更すれば大丈夫だと思います。 ちなみに、何でもかんでもプラグインで実装するのはおすすめしません。 - 別の案件などで再利用したい - アンインストール機能が必要 - Git などでソースコードのバージョン管理ができない といった特別な理由がある場合のみ、プラグインでの拡張を検討いただいた方がいいと思います。 以下に理由を記載してます https://qiita.com/nanasess/items/fe2a93ff64833d87eb19
nanasess

2020/07/21 01:34

app/config/eccube/packages/security.yaml の定義変更も、厳密にいえば本体のコード編集になりますので、これも避けたいようであれば、プラグインでの実装は困難という回答になると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問