CS-Cartではユーザ名とパスワードでログインすることができたようだが、4.3.1からはメールアドレスのみで認証するようになったようだ。一応、usersテーブルにはuser_loginカラムというそれらしいものがあるが、認証には使われていない。
Unfortunately, the usernames are not supported since 4.3.1
Login With Email/username - General Questions - CS-Cart Community Forums
ユーザ名とパスワードしかユーザマスタに持ってない古いシステムからCS-Cartに乗り換える場合、これが意外と障壁になる。
CS-Cartはどこで認証しているか?
app/functions/fn.users.phpのfn_auth_routines
関数が認証の処理だが、残念ながらPHPフックはない。したがって、直接コアのコードを修正する外ない。
修正する箇所
まず、fn_auth_routines
関数の下記の部分を見つける。
$user_data = db_get_row("SELECT * FROM ?:users WHERE $field = ?s" . $condition, $user_login);
その後ろに、下記のような行を追加する
if (empty($user_data)) {
$user_data = db_get_row("SELECT * FROM ?:users WHERE user_login = ?s" . $condition, $user_login);
}
これだけだと、ログインフォームでメールアドレスの書式チェックが走ってログインできないので、テンプレートも変更する。下記部分のcm-email
を消すと、メールアドレスのバリデーションが無効になる。また、「Eメール」という表示を「ユーザー名」にしたいので、__("email")
は__("username")
に置き換える。
design/backend/templates/views/auth/login_form.tpl
...
- <label for="username" class="cm-trim cm-required cm-email">{__("email")}:</label>
+ <label for="username" class="cm-trim cm-required">{__("username")}:</label>
...