概要
今EC-CUBEのdtb_customerを色々といじっているのですが、ユーザ新規登録時に自動的にセットされるsecret_keyというフィールドは一体なんぞや?と気になりまして、先日のユーザパスワードに引き続きこちらも調べてみました。
secret_keyはユーザ仮登録時のID
secret_keyはユーザの仮登録機能に必要な、同一ホスト内で一意のIDということらしいです。
まあ、本登録のする際にsecret_keyを使ってユーザデータを引っ張ってくるんでしょう。良くわかりませんが。
仮登録機能を使わない場合は特に無くてもいいのかもしれませんが、仮登録機能を使わなくてもユーザ登録時には自動的に追加されるし、Nullが許されないフィールドということもあって別システムからユーザを移行させようと考えている僕はとりあえずEC-CUBEのsecret_key生成アルゴリズム*1 にしたがって入れてあげようと思います。
secret_keyの生成アルゴリズム*2
secret_keyを生成するのに使っているメソッドはSC_Utils_Ex::sfGetUniqRandomId($head);で、このメソッドの中で更にGC_Utils_Ex::gfMakePassword($pwLength)を呼んでいます。
でアルゴリズムを整理すると…*3
// シークレットキー
$secret_key = “”;
// $head たぶん仮登録なら”t”,本登録なら”r”だと思うが自信無し
if (仮登録有効の場合) {
$head = “t”;
} elseif (仮登録無効の場合(即本会員)) {
$head = “r”;
}
// 乱数表のシードを決定
srand((double)microtime() * 54234853);
// パスワード文字列の配列を作成
$character = “abcdefghkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679”;
$pw = preg_split(“//”, $character, 0, PREG_SPLIT_NO_EMPTY);
$password = “”;
for($i = 0; $i<$pwLength; $i++ ) {
$password .= $pw[array_rand($pw, 1)];
}
// 同一ホスト内で一意のIDを生成 $headをプレフィックスに使うんだね
$id = uniqid($head);
// $secret_keyを作成
$secret_key = $id.$password;
[/sourcecode]
ということになるらしい。
と、言うことでこのアルゴリズムにしたがって適当にsecret_keyのフィールドを埋めてやろうと思います。
コメント
EC-CUBE外のプログラムで、簡易会員というものを作成しております。
大変参考になりました。
ありがとうございました。
お役に立ててよかったです^^
ご丁寧にありがとうございました。