EC CUBEインポートプラグインで下記の様なご要望がありました。
EC CUBEのマイページで登録した顧客のパスワードを、
SOY Shopに移行した後も利用したい。
会員制サイトとなると、
パスワードの変更通知を送っただけで離脱されるお客様が多いのではないか?
という懸念がありました。
パスワードというものは、
データベースを悪意のある人に見られても良いように平文では保管しない
という運営のルールみたいなものがあります。
平文というのは、
パスワードを登録するときに「password」と入力したら、このままの文字列で保管することで、
一般的な運営では、一方向ハッシュ関数という復号出来ない暗号にして保管します。
例としては、
passwordを暗号化したら、5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8に変換。
この暗号をpasswordに戻すことは出来ません。
Goで一方向ハッシュ関数によるパスワードの暗号化を書いてみた
パスワード認証する時は、
入力したパスワードを再度一方向ハッシュ関数で暗号化し、
データベースに保管されている暗号化されたパスワードと一致するか調べ、
一致していれば認証OKにする。
戻すことは出来ないということ、
EC CUBEとSOY Shopでは暗号化する時の仕組みが若干異なるので、
インポート時にEC CUBE用からSOY Shop用にすることが出来ませんでした。
なんとかならないか?と相談された時、
データベースに入っているEC CUBEのパスワードだった場合はEC CUBEで使われている暗号化の仕組みを使えば良いのでは?
ということを思いつき、
組み込んでみたところ、無事ログイン出来ました。
でも、
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8の様に変換されたら、
EC CUBEかSOY Shopかわからないのでは?って疑問が生じるけど、
SOY Shopの方が好都合なことに、
sha512/fa6a2185b3e0a9a85ef41f{途中省略}/salt
のようにスラッシュを2つ入れて保管していたため、
スラッシュが入っている暗号化パスワードはSOY Shop
スラッシュが入っていない暗号化パスワードはEC CUBE
で条件分けの実行を実装することが出来ました。
EC CUBEで登録してインポートした顧客がSOY Shopのサイトでパスワードを変更した場合は、
もちろんSOY Shopのパスワードの仕組みで保管されますので、
ある程度運営したら仕組みを切り替えるといった対応は不要です。
ただしですが、
今回はEC CUBE2.4.4からの移行で、
この次のバージョンから暗号化の仕組みは異なるみたいで、
今回の対応はバージョン2.4.4以前の仕組みを導入しています。
今後、機会があれば、2.11.1以降の仕組みも導入します。
今回の修正をご利用したい場合はフォーラムかGitHubで管理しているパッケージからダウンロードしてください。
SOY CMS フォーラム • トピックの表示 - EC CUBEデータインポートプラグイン
GitHub
https://github.com/inunosinsi/soycms/tree/master/package/soyshop