06/04/2021, 14:46

[Module User] - Chức năng đăng xuất - PHP MVC căn bản

Bài trước chúng ta đã xây dựng xong chức năng đăng nhập, vậy thì bài này chúng ta sẽ làm một chức năng ngược với đăng nhập đó là đăng xuất. Chức năng đăng xuất hoạt động như sau: Khi người dùng truy cập vào trang đăng xuất thì sẽ lập tức xóa session người dùng, sau đó redirect lại trang login của ...

Bài trước chúng ta đã xây dựng xong chức năng đăng nhập, vậy thì bài này chúng ta sẽ làm một chức năng ngược với đăng nhập đó là đăng xuất.

Chức năng đăng xuất hoạt động như sau: Khi người dùng truy cập vào trang đăng xuất thì sẽ lập tức xóa session người dùng, sau đó redirect lại trang login của hệ thống.

Trước khi vào vấn đề chính thì bạn sẽ phải bổ sung một số hàm trong thư viện như sau:

1. Bổ sung thư viện xử lý role

Bạn vào file libs/role.php và bổ sung hai hàm sau:

 

// Lấy username người dùng hiện tại
function get_current_username(){
    $user  = is_logged();
    return isset($user['username']) ? $user['username'] : '';
}

// Lấy level người dùng hiện tại
function get_current_level(){
    $user  = is_logged();
    return isset($user['level']) ? $user['level'] : '';
}

 

Hai hàm này dùng để lấy thông tin username và level của người dùng hiện tại (tức là người dùng đang login).

2. Viết chức năng logout

Bạn vào file admin/modules/common/logout.php và nhập đoạn code sau:

 

if (!defined('IN_SITE')) die('The request not found'); 

// Xóa session login
set_logout();

// Chuyển hướng sang trang login
redirect(base_url('admin/?m=common&a=login'));

 

File này sẽ xử lý xóa session login và redirect sang trang login.

3. Xuất tên người dùng đang đăng nhập ở header

Bạn vào file admin/widgets/header.php và tìm đoạn code sau:

 

<div>
    Xin chào Admin | 
    <a href="#">Login</a>
    <a href="#">Out</a>
</div>

 

Sau đó sửa lại như sau:

 

<div>
    Xin chào <?php echo get_current_username(); ?> |
    <a href="<?php echo base_url('admin/?m=common&a=logout'); ?>">Logout</a>
</div>

 

Ở đoạn code trên sẽ xuất ra tên người dùng đang đăng nhập và kèm theo nút logout, nút này sẽ link đến module common/logout.php.

Bây giờ bạn hãy đăng nhập vào hệ thống sẽ thấy kết quả ở header như sau:

header thong tin nguoi dung png

Sau đó bạn click vào nút logout thì sẽ bị đẩy sang trang login bởi Session lưu thông tin đăng nhập đã bị xóa.

Sau khi logout thì các bạn thấy ở phía trên cùng của website vẫn còn xuất hiện menu và một câu thông báo, điều này không phù hợp bởi vì chỉ khi người dùng đã đăng nhập rồi mới thấy phần đó. Để giải quyết vấn đề này thì ta cho phần header vào một câu lênh if, câu lệnh này sẽ kiểm tra nếu là admin (tức là đã đăng nhập) thì mới xuất hiện.

Các bạn bổ sung một lệnh if bao bên ngoài thẻ div#header.

 

<?php if (is_admin()){ ?>
<div id="header">
    <ul>
        <li>
            <a href="#">User</a>
        </li>
        <li>
            <a href="#">Tin tức</a>
        </li>
        <li>
            <a href="#">Bình Luận</a>
        </li>
    </ul>
    <div>
        Xin chào <?php echo get_current_username(); ?> |
        <a href="<?php echo base_url('admin/?m=common&a=logout'); ?>">Logout</a>
    </div>
</div>
<?php } ?>

 

Các bạn refresh lại trang sẽ thấy nó đã bị mất, chỉ khi nào đã đăng nhập thì mới xuất hiện.

4. Lời kết

Vậy là chúng ta đã xử lý xong chức năng đăng nhập và đăng xuất trong admin, chức năng này khá quan trọng bởi nó sẽ phân quyền chỉ có admin mới có thể sử dụng website. Bài tiếp theo chúng ta sẽ viết thư viện phân trang bằng PHP thuần để phân trang danh sách người dùng.

Tạ Quốc Bảo

23 chủ đề

7270 bài viết

0