バージョン選択

フォーラム

メニュー

オンライン状況

63 人のユーザが現在オンラインです。 (48 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 62
789clubqt もっと...

サイト内検索

質問 > フロント機能 > 販管システムから顧客情報をAPIで取得してその情報でマイページにログインしたいが、認証に失敗する。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
chiliactor
投稿日時: 2024/10/28 18:21
対応状況: −−−
新米
登録日: 2024/10/28
居住地:
投稿: 2
販管システムから顧客情報をAPIで取得してその情報でマイページにログインしたいが、認証に失敗する。
EC-CUBE
4.3.0
サーバーOS
Linux .xserver.jp 5.4.0-189-generic #209-Ubuntu SMP Fri Jun 7 14:05:13 UTC 2024 x86_64
DBサーバー
MySQL 10.5.24-MariaDB-log
WEBサーバー
Apache
PHP
8.2.22 (Core, date, libxml, openssl, pcre, sqlite3, zlib, bz2, calendar, ctype, curl, hash, fileinfo, filter, ftp, gettext, gmp, json, iconv, SPL, session, standard, Phar, posix, pspell, random, Reflection, mbstring, shmop, SimpleXML, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, xml, zip, mysqlnd, cgi-fcgi, apcu, bcmath, dba, dom, gd, imagick, imap, intl, ldap, exif, mcrypt, mysqli, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, soap, xmlreader, xmlwriter, xsl, Zend OPcache)


表題の件につきまして デフォルトの会員マスタを利用せずに 販売管理から顧客データを取得 セッションに保持して ログインがしたいです。
セッションを代入するところまではできたのですが、認証システムのようなところで失敗します。
何が問題なのか分かりません。どなたか詳しい方がいらっしゃれば教えてください。


エラーの内容

Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\HttpException: "Full authentication is required to access this resource." at ExceptionListener.php line 232
request Hide context Show trace
[▼
  "exception" => 
Symfony\Component\HttpKernel\Exception
\
HttpException {#898 ▼
    #message: "Full authentication is required to access this resource."
    #code: 0
    #file: "
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/security-http/
Firewall/ExceptionListener.php"
    #line: 232
    -previous: 
Symfony\Component\Security\Core\Exception
\
InsufficientAuthenticationException {#29 …}
    -statusCode: 401
    -headers: []
    trace: {▼
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/security-http/
Firewall/ExceptionListener.php:232 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/security-http/
Firewall/ExceptionListener.php:189 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/security-http/
Firewall/ExceptionListener.php:148 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/security-http/
Firewall/ExceptionListener.php:103 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/event-dispatcher/
Debug/WrappedListener.php:116 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/event-dispatcher/
EventDispatcher.php:220 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/event-dispatcher/
EventDispatcher.php:56 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/event-dispatcher/
Debug/TraceableEventDispatcher.php:139 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/http-kernel/
HttpKernel.php:239 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/http-kernel/
HttpKernel.php:91 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env/vendor
/symfony/http-kernel/
Kernel.php:197 {▶}
      
/home/xs177621/bitsuhan.site/public_html/development-env
/
index.php:83 {▶}
    }
  }
]



変更した箇所
app/config/eccube/packages/security.yaml
Symfony Security-Bundle のログイン処理に関する定義をコメントアウト

-                form_login:
-                    check_path: mypage_login
-                    login_path: mypage_login
-                    csrf_token_generator: security.csrf.token_manager
-                    default_target_path: homepage
-                    username_parameter: 'login_email'
-                    password_parameter: 'login_pass'
-                    use_forward: false
-                    success_handler: eccube.security.success_handler
-                    failure_handler: eccube.security.failure_handler
+ #            form_login:
+ #                check_path: mypage_login
+ #                login_path: mypage_login
+ #                csrf_token_generator: security.csrf.token_manager
+ #                default_target_path: homepage
+ #                username_parameter: 'login_email'
+ #                password_parameter: 'login_pass'
+ #                use_forward: false
+ #                success_handler: eccube.security.success_handler
+ #                failure_handler: eccube.security.failure_handler



src/Controller/Mypage/MypageController.php

ログインフォーム送信時のAPI処理を追記
/**
     * ログイン画面.
     *
     * @Route("/mypage/login", name="mypage_login")
     * @Template("Mypage/login.twig")
     */
    public function login(Request $request, AuthenticationUtils $utils)
    {

        if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
            log_info('認証済のためログイン処理をスキップ');

            return $this->redirectToRoute('mypage');
        }

        /* @var $form \Symfony\Component\Form\FormInterface */
        $builder = $this->formFactory
            ->createNamedBuilder('', CustomerLoginType::class);

        $builder->get('login_memory')->setData((bool) $request->getSession()->get('_security.login_memory'));

        if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
            $Customer = $this->getUser();
            if ($Customer instanceof Customer) {
                   $builder->get('login_email')
                      ->setData($Customer->getEmail());
            }
        }

        $event = new EventArgs(
            [
                'builder' => $builder,
            ],
            $request
        );
        $this->eventDispatcher->dispatch(EccubeEvents::FRONT_MYPAGE_MYPAGE_LOGIN_INITIALIZE, $event);

        $form = $builder->getForm();

+       $error = false;
+
+       if ($form->isSubmitted()) {
+           $username = $form['login_id']->getData();
+           $password = $form['login_pass']->getData();
+
+           try {
+               // API実行
+               $customerResponse = $this->customerApi->callApiAuthenticate($username, $password); 
+               if(!empty($customerResponse)){
+                   $customer = $customerResponse['LoginMember']['Member'];
+                   // 他のページでも顧客データを扱えるよう、取得した情報をセッションに格納
+                   $this->session->set('customer', $customer);

※ここでエラーとなる。

+
+                   return $this->redirectToRoute('mypage');
+               } else {
+                   $error = true;
+               }
+           } catch (ApiException $e) {
+               log_info($e->getMessage());
+               $error = true;
+           }
+       }

        return [
-           'error' => $utils->getLastAuthenticationError(),
+          // error = true の場合、テンプレート側でエラー処理を行う
+          'error' => $error,
            'form' => $form->createView(),
        ];
    }


joolenkoya
投稿日時: 2024/12/3 21:50
対応状況: −−−
半人前
登録日: 2017/3/1
居住地:
投稿: 16
Re: 販管システムから顧客情報をAPIで取得してその情報でマイページにログインしたいが、認証に失敗する。
販売管理から顧客データを取得後、
顧客データをセッションに保存ではなく、会員マスタに自動登録する方式がより簡単かと思います。

受注データやサンクスメールなど、会員マスタが必要になる箇所が多々ありますので、
会員マスタを使用しない場合は、そのための改造を全体的に実施する必要が出てきますため。


株式会社ジョーレン
◆EC-CUBEプラチナパートナー◆
スピード構築でEC事業をサポート致します
EC-CUBE2系、3系、4系構築実績あり
ホームページ
chiliactor
投稿日時: 2024/12/4 9:45
対応状況: −−−
新米
登録日: 2024/10/28
居住地:
投稿: 2
Re: 販管システムから顧客情報をAPIで取得してその情報でマイページにログインしたいが、認証に失敗する。
ありがとうございます。
どちらにせよ、ec-cubeのログインシステムを使わずに role_user になるためには、独自の認証ロジックを作成する必要があるのかなぁ。
と思いました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は102,779名です
総投稿数は112,378件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2330
5
umebius
2085
6
h_tanaka
1962
7
yuh
1900
8
mcontact
1664
9
red
1579
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
805
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
balisys
502


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.