Idenya adalah authentication melalui IMAP Server sehingga user tidak perlu mengingat banyak password. User & password untuk masuk aplikasi sama dengan user & password email. Scenarionya seperti ini.
- Sediakan field email pada table apa saja yang menyimpan data user (misal table user)
- Data email adalah valid email yang terdaftar pada IMAP Server
- Pada saat login, system mencari data user dengan email yang diinput pada form login
- Jika email tidak ditemukan maka login gagal dengan notifikasi invalid user
- Jika email ditemukan maka lakukan otentifikasi ke IMAP server dengan email & password yang diinput melalui form login
- Jika otentifikasi gagal maka login gagal dengan notifikasi password invalid
- Jika otentifikasi berhasil maka login sukses
Implementasinya sangat mudah. Yaitu dengan menyesuaikan file protected/components/UserIdentity.php pada method authenticate sebagai berikut (sesuaikan mail.example.com dan 993)
public function authenticate()
{
$user=Employee::model()->find(‘LOWER(email) = ? AND active = 1’,array(strtolower($this->username)));if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;else
{$imapConnection = @imap_open(“{mail.example.com:993/imap/ssl/novalidate-cert}INBOX”, $this->username, $this->password);
imap_errors();
imap_alerts();if (!$imapConnection)
{
$this->errorCode = self::ERROR_PASSWORD_INVALID;
}else
{
imap_close($imapConnection);
$this->_id=$user->id;
$this->username=$user->name;
$this->errorCode=self::ERROR_NONE;
}
}return $this->errorCode==self::ERROR_NONE;
}
Pada script di atas table yang saya gunakan adalah table employee yang menyimpan data karyawan.
Selamat mencoba.