はじめに
こんばんは。
今回はsymfonyの備忘録です。
symfonyのユーザーなどのパスワードのアルゴリズムをしたいということがありましたので、残しておきます。
本題
めちゃめちゃかんたんで security.yaml
に記載するだけです。
security: password_hashers: App\Entity\User: algorithm: xxxx ← ここ
アルゴリズムは EncoderFactory を確認すると、 auto
以外にも特定のアルゴリズムを設定できます。
例えば、 plaintext
や bcrypt
です。
基本的に auto
でも問題ないと思いますが、もし、ローカルと本番環境等でもしインストールされている拡張機能に差異があると auto
だとうまく行かない場合があります
例えば 管理用のスーパユーザーをfixtureで登録する場合とかになります。
auto
に設定している状態で sodium
が入っている場合 、 EncoderFactoryにて SodiumPasswordEncoder.phpが選択されます。
そしてsodiumを使用してハッシュ化したパスワードが生成されます。
そしてその fixtureを sodiumが入っていない 環境で loadします。
そうするとそのユーザーでログインする場合、 sodiumが入っていないので NativePasswordEncoder.phpが選択されて、結果パスワードが合わなくなります。
終わりに
そもそも、環境差異があるって時点でアウトですが、今回はGAE + CloudSQLの環境で起きました。。。
CloudSQLにfixtureを読み込ませるさい、proxyを使ってローカルから入れる事ができたのですが、そのさいこの環境差分が起きました。
GAEのphp環境は インストール済みの拡張機能にも、動的追加可能な拡張機能にも sodiumがなかったので、ハマってしまいました。
かんたんですが、以上です。