Anda di halaman 1dari 9

Membuat library user authentication pada Phalcon PHP

Membuat library user authentication pada Phalcon PHP


klikpedia.com /2015/03/31/membuat-library-user-authentication-pada-phalcon-php/

3/31/2015

Apri Pardede

User authentication atau otentikasi pengguna sangat dibutuhkan pada sebuah aplikasi yang
menggunakan sistem keamanan pengguna. Mulai dari pengecekan akses pengguna, mendaftar
dan menghapus pengguna, login dan logout pengguna, dan masih banyak lagi fungsi otentikasi lainnya.
Berhubung ane sedang mendalami framework php yang namanya Phalcon PHP, maka pada kesempatan kali ini
ane akan membabarkan bagaimana cara membuat library user authentication pada Phalcon PHP.

Untuk membuatnya, kita hanya membutuhkan sebuah file, dalam hal ini ane menggunakan file yang bernama
Auth.php. Selain itu, kita juga membutuhkan database untuk menyimpan data penggunanya, dalam hal ini ane
menggunakan database MySQL. Satu hal lagi, library user authentication ini hanya berfungsi pada Phalcon
HMVC. Silahkan dibaca dan dibuat terlebih dahulu Phalcon HMVC nya. Jika sudah, buatlah sebuah file
bernama Auth.php dan letakkan pada folder /Apps/Libraries. Pertama buatlah code header yang berisi nama
namespace, use dan class seperti berikut ini:

Code header

PHP

1 <?php

2 namespace Libraries;

4 /*!

5 * @package Membuat library user authentication pada Phalcon PHP

6 * @author Apri Pardede

7 * @version 1.0

8 * @access Public

9 * @path /artikel_phalcon/Apps/Libraries/Auth.php

10 */

11

12 use Phalcon\Mvc\User\Component, Phalcon\Http;

13

14 class Auth extends Component

15 {

Pada library ini membutuhkan 2 class dasar Phalcon PHP yaitu Phalcon\Mvc\User\Component dan
Phalcon\Http . Class Phalcon\Mvc\User\Component merupakan class dasar yang akan kita gunakan dalam
module MVC, sehingga kita perlu melakukan extends pada class tersebut agar dapat dipanggil dalam child
1/9
controller. Sedangkan class Phalcon\Http kita gunakan untuk mendapatkan hasil request seperti client address
dan user agent browser pengguna. Selanjutnya kita butuh melakukan deklarasi beberapa konfigurasi yang akan
digunakan, seperti koneksi database, nama tabel, dan http request. Fungsinya untuk memudahkan kita dalam
memanggil properti konfigurasi pada function – function lain yang ada pada class Auth ini. Berikut ini
penampakannya:

Deklarasi variable

PHP

16 private $_config;

17 private $_error;

18

19 public function __construct(array $config = array()) {

20 if (!isset($config['db'])) throw new \Exception("Parameter 'db' is required");

21 if (!isset($config['userTable'])) $config['userTable'] = 'sys_user';

22 if (!isset($config['loginTable'])) $config['loginTable'] = 'sys_login';

23 if (!isset($config['request'])) $config['request'] = new Http\request();

24

25 $this->_config = $config;

26 }

Function selanjutnya adalah function login(). Function ini berfungsi untuk agar pengguna dapat melakukan login
sesuai dengan username dan password yang telah terdaftar pada aplikasi.

Function login

PHP

2/9
28 public function login($username, $password) {

29 if ($username === NULL || empty($username)) {

30 $this->_error = 'Username is required';

31 return false;

32 }

33 elseif ($password === NULL || empty($password)) {

34 $this->_error = 'Password is required';

35 return false;

36 }

37

38 $data = $this->getUser($username);

39

40 if ($data !== false) {

41 $password = $this->hashPassword($username, $password);

42

43 if ($data->su_password != $password) {

44 $this->_error = 'Username or password is invalid';

45 return false;

46 }

47

48 $this->save($data);

49

50 return true;

51 }

52 else {

53 $this->_error = 'Username or password is invalid';

54 return false;

55 }

56 }
Pada function login() diatas membawa dua buah parameter, yaitu $username dan $password. Keduanya
berasal dari controller yang menggunakan library Auth. Didalam function login() ini, terdapat beberapa validasi
username dan password. Mulai dari pengecekan apakah variable username atau password kosong,
pengecekan apakah username sudah terdaftar pada database menggunakan function getUser() yang membawa
parameter username, serta pengecekan password berdasarkan data yang didapat melalui query berdasarkan
username dengan menggunakan function hashPassword() yang membawa parameter username dan password.
Kemudian jika semua validasi benar, maka akan menjalankan function save() yang berisi perintah untuk

3/9
mendaftarkan data pada session. Berikut penampakan function hashPassword(), function getUser() dan function
save():

Function hashPassword()

PHP

64 public function hashPassword($username, $password) {

65 return sha1(strtolower($username . $password));

66 }

Function getUser()

PHP

85 public function getUser($username) {

86 $db = $this->_config['db'];

87 $userTable = $this->_config['userTable'];

88

89 $sql = "

90 SELECT

91 *

92 FROM

93 $userTable

94 WHERE

95 a.su_username = ? AND a.su_is_active = ?

96 ";

97

98 return $db->fetchOne($sql, \Phalcon\Db::FETCH_OBJ, array($username, 1));

99 }

Function save()

PHP

58 public function save($data) {

59 $this->session->set('uId', $data->su_id);

60 $this->session->set('uName', $data->su_username);

61 $this->session->set('uFullname', $data->su_fullname);

62 }

Selanjutnya adalah pembuatan fungsi untuk pengecekan apakah pengguna sudah login atau belum. Function ini
kita beri nama isLogged() yang membawa parameter username. Kemudian parameter username akan kita
4/9
match dengan session uName. Berikut ini code nya:

Function isLogged

PHP

68 public function isLogged($username) {

69 $sessOption = $this->session->getOptions();

70

71 if ($this->session->has('uName')) {

72 if ($this->session->get('uName') == $username) return true;

73 }

74

75 return false;

76 }

Nah terakhir, berikut ini penampakan file secara keseluruhan:

1 <?php

2 namespace Libraries;

4 /*!

5 * @package Membuat library user authentication pada Phalcon PHP

6 * @author Apri Pardede

7 * @version 1.0

8 * @access Public

9 * @path /artikel_phalcon/Apps/Libraries/Auth.php

10 */

11

12 use Phalcon\Mvc\User\Component, Phalcon\Http;

13

14 class Auth extends Component

15 {

16 private $_config;

17 private $_error;

18

19 public function __construct(array $config = array()) {

20 if (!isset($config['db'])) throw new \Exception("Parameter 'db' is required");


5/9
21 if (!isset($config['userTable'])) $config['userTable'] = 'sys_user';

22 if (!isset($config['loginTable'])) $config['loginTable'] = 'sys_login';

23 if (!isset($config['request'])) $config['request'] = new Http\request();

24

25 $this->_config = $config;

26 }

27

28 public function login($username, $password) {

29 if ($username === NULL || empty($username)) {

30 $this->_error = 'Username is required';

31 return false;

32 }

33 elseif ($password === NULL || empty($password)) {

34 $this->_error = 'Password is required';

35 return false;

36 }

37

38 $data = $this->getUser($username);

39

40 if ($data !== false) {

41 $password = $this->hashPassword($username, $password);

42

43 if ($data->su_password != $password) {

44 $this->_error = 'Username or password is invalid';

45 return false;

46 }

47

48 $this->save($data);

49

50 return true;

51 }

52 else {

53 $this->_error = 'Username or password is invalid';

54 return false;

6/9
55 }

56 }

57

58 public function save($data) {

59 $this->session->set('uId', $data->su_id);

60 $this->session->set('uName', $data->su_username);

61 $this->session->set('uFullname', $data->su_fullname);

62 }

63

64 public function hashPassword($username, $password) {

65 return sha1(strtolower($username . $password));

66 }

67

68 public function isLogged($username) {

69 $sessOption = $this->session->getOptions();

70

71 if ($this->session->has('uName')) {

72 if ($this->session->get('uName') == $username) return true;

73 }

74

75 return false;

76 }

77

78 public function logout() {

79 $this->session->remove('uId');

80 $this->session->remove('uName');

81 $this->session->remove('uFullname');

82 $this->session->destroy();

83 }

84

85 public function getUser($username) {

86 $db = $this->_config['db'];

87 $userTable = $this->_config['userTable'];

88

7/9
89 $sql = "

90 SELECT

91 *

92 FROM

93 $userTable

94 WHERE

95 a.su_username = ? AND a.su_is_active = ?

96 ";

97

98 return $db->fetchOne($sql, \Phalcon\Db::FETCH_OBJ, array($username, 1));

99 }

100

101 public function register($data = array()) {

102 $db = $this->_config['db'];

103 $table = $this->_config['userTable'];

104 $password = sha1(strtolower($username . 'password'));

105

106 $data['su_username'] = $username;

107

108 if (!isset($data['su_password'])) {

109 $data['su_password'] = $password;

110 }

111

112 $data['su_is_active'] = 1;

113

114 $fields = array_keys($data);

115 $params = array_map(function ($f) {

116 return '?';

117 }, $fields);

118

119 $sql = "INSERT INTO $table(" . implode(", ", $fields) . ") VALUES(" . implode(", ", $params) . ")";

120

121 if ($db->execute($sql, array_values($data))) {

122 return json_decode(json_encode($data));

8/9
123 }

124

125 return false;

126 }

127 }

Jika ada pertanyaan atau ada bagian yang ga ngerti, silahkan ditanya melalui comment yah.

9/9