バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > UserPasswordバリデーションが効かない

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
umebius
投稿日時: 2021/8/18 20:52
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: UserPasswordバリデーションが効かない
いえ、チェックする段階ではデータベース上でパスワードは変更されていませんので、変更前のパスワードを保持するカラムを作る必要はありません。
変更されているのはあくまでPHPのオブジェクト上です。

ですので、ユーザーが入力してもらった現在のパスワードのデータをハッシュ化したものと、その時点でデータベースに登録されているデータが一致するかどうかを確認すれば良いと言うことになります。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

gfcph
投稿日時: 2021/8/18 8:31
対応状況: −−−
半人前
登録日: 2021/7/16
居住地:
投稿: 29
Re: UserPasswordバリデーションが効かない
umebius様

ご教示いただき有難うございます。

ということは変更前のパスワードを保持するカラムを
customerテーブルに追加し、
そことチェックを行うようになるのでしょうか。。

ご教示いただいた、FormEventを使う方向で
色々探ってみたいと思います。
umebius
投稿日時: 2021/8/16 21:48
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: UserPasswordバリデーションが効かない
マイページのEntryTypeでは管理画面側とは違って、
'data_class' => 'Eccube\Entity\Customer',となっております。

そのためオブジェクト上、$Customerのpasswordの値はフォーム送信時にフォームから送信した'**********'もしくはユーザーが変更を加えた値で上書きされています。

それがUserPasswordバリデーションでチェックした時に一致しない理由ではないかと思います。

なのでUserPasswordを使うよりもFormEventを使うなどして独自にバリデーションした方が良い気がしますね。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

gfcph
投稿日時: 2021/8/16 17:01
対応状況: −−−
半人前
登録日: 2021/7/16
居住地:
投稿: 29
UserPasswordバリデーションが効かない
▼テンプレート
[EC-CUBE]4.0.4、新規インストール
[レンタルサーバ]さくらのレンタルサーバー
[OS] FreeBSD
[PHP] 7.4.10
[データベース] MySQL 5.7.32
[WEBサーバ] Apache
[ブラウザ]chrome
[導入プラグインの有無]複数
[現象]
お世話になります。
標題の件、下記サイト様
https://qiita.com/idani/items/fd6eb99bd19e56ab61a6
と管理画面側を参考に、
アカウントのパスワードの再チェックフォームをフロント側に追加しました。
ですが、正しい現在パスワードを入力しても、エラーメッセージ
「ユーザーの現在のパスワードでなければなりません。」が表示されてしまいます。
どうすれば正しい挙動となるか、わかる方いましたらご教示ください。

変更点は以下になります。

Eccube\Form\Type\Front\EntryType.phpに追記
use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('current_password', PasswordType::class, [
                'required' => true,
                'mapped' => false,
                'constraints' => [
                    new Assert\NotBlank(),
                    new UserPassword(),
                ],
            ])


app/template/XXXX/Mypage/change.twigに追記
<div class="ec-input{{ has_errors(form.current_password) ? ' error' }}">
        {{ form_widget(form.current_password, {
            'attr': { 'placeholder': '変更前のパスワードを入力してください'|trans },
            'type': 'password'
        }) }}
        {{ form_errors(form.current_password) }}
    </div>


宜しくお願い致します。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,717名です
総投稿数は109,952件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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