Application - Authentication

Configuration

Konfigurasi auth terletak pada file auth.php

Pada konfigurasi auth, ada 2 element penting yang perlu diperhatikan adalah guard dan provider.

Database

Secara default CApp sudah menyertakan model CApp_Model_User yang akan digunakan pada model user untuk proses authentikasi.

Ketika membuat table users baru, yang perlu diperhatikan adalah harus ada kolom password minimal 60 karakter, dan kolom remember_token dengan minimal 100 karakter.

Kolom remember_token akan digunakan untuk menyimpan token yang diperoleh saat user memilih "remember me" option saat user login pada aplikasi

Login

Contoh Kode:

public function login() {
    $post = c::request()->post();
    if (!empty($post)) {
        $email = isset($post['email']) ? $post['email'] : '';
        $password = isset($post['password']) ? $post['password'] : '';
        $rememberMe = isset($post['remember-me']) ? true : false;

        $errCode = 0;
        $errMessage = '';
        $json = [];

        if ($errCode == 0) {
            if (strlen($email) == 0) {
                $errCode++;
                $errMessage = 'Email required';
            }
        }
        if ($errCode == 0) {
            if (strlen($password) == 0) {
                $errCode++;
                $errMessage = 'Password required';
            }
        }

        if ($errCode == 0) {
            try {
                $successLogin = c::app()->auth()->attempt(['username' => $email, 'password' => $password], $rememberMe);
                if ($successLogin) {
                    cmsg::clear('error');
                } else {
                    $errCode++;
                    $errMessage = 'Username/Password Invalid';
                }
            } catch (Exception $ex) {
                $errCode++;
                $errMessage = $ex->getMessage();
            }
        }

        return c::base()->toJsonResponse($errCode, $errMessage, $json);
    }

    if (c::auth()->check()) {
        return c::redirect('admin/home');
    }

    return c::app();
}