構成でユーザー名でログインするようにイオン認証を設定できることはわかっています。また、構成で電子メールでログインするように設定できることも知っています。
どちらかを自動的に使用するように設定する簡単な方法はありますか?
構成でユーザー名でログインするようにイオン認証を設定できることはわかっています。また、構成で電子メールでログインするように設定できることも知っています。
どちらかを自動的に使用するように設定する簡単な方法はありますか?
自動の場合は、どちらかが有効なリターンを返すかどうかを確認するために、一方を試してからもう一方を試すことを意味します。
ログインはion_auth_model行で発生します: 899
->where($this->identity_column, $this->db->escape_str($identity))
したがって、これを変更して「または」を実行し、両方の列を試すことができます。モデル全体でこれを行う必要があります。考慮すべき実際のログインだけではなく、ユーザーが別のユーザーのユーザー名である電子メールを持っているという潜在的な問題があるためです (ただし、可能性は低いです)。
ほんの数行のコードで可能です: これがion_auth構成ファイルであると仮定しましょう:
$config['identity'] = 'username'; // A database column which is used to login with
ログイン機能を 2 回実行する必要があります。最初の試行 (ユーザー名を使用) が失敗した場合は、識別子を変更して再試行できます。
$this->ion_auth_model->identity_column = "メール";
モデル、ライブラリ、またはカスタム クエリを変更する必要はありません
を編集しなくてもion_auth_model
、次のようなことができます。
すでにこの構成があることを考慮して:
$config['identity'] = 'username';
コントローラーにこれがあります:
// log the user in
public function login()
{
...
if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember))
{
//if the login is successful
チェックを許可し、成功しない場合はemail
、ID 列を設定してチェックすることができます。
// log the user in
public function login()
{
...
// check for username
$login = $this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember);
if(! $login) { // username is not successful
$this->ion_auth_model->identity_column = 'email';
// check for email
$login = $this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember);
}
if( $login ) {
// successful
} else {
// both failed
}
これの利点:コア ファイルを変更していないため、ionAuth の新しい更新との互換性が向上します。これの欠点は、データベースを二重にクエリする必要があることです。
以下から変更された認証コントローラーコード: ionAuth 認証コントローラーの例
ionAuth レポに関するディスカッション:
最近、Ion Auth を fork し、構成で選択できるように必要な拡張を行いました。フォークは次の場所にあります。
https://github.com/zepernick/CodeIgniter-Ion-Auth
これを Ion Auth コード ベースに含めるようにプル リクエストを提出しましたが、現時点では受け入れられていません。コードが複雑になるかどうかについては、いくつかの議論がありました。それらにメモをドロップし、この機能が役立つ場合は、この機能が必要であることを知らせてください。
$identity 変数が電子メールかどうかを確認する方が簡単だと思います。メールでない場合は、列を「ユーザー名」に設定します。このようなもの:
$check_column = valid_email($identity) ? $this->identity_column : 'username';
$query = $this->db->select('username, email, id, password, active, last_login')
->where($check_column, $this->db->escape_str($identity))
->limit(1)
->get($this->tables['users']);
この場合、email_helper をロードする必要があります。
私のために働きます。
「identity」ion_auth config で「email」を使用し、ion_auth_model行866の $query の後にこのコードを追加します
if($query->num_rows() == 0){
$query = $this->db->select($this->identity_column . ', username, email, id, password, active, last_login')
->where('username', $this->db->escape_str($identity))
->limit(1)
->get($this->tables['users']);
}