THẢO LUẬN

thg 1 15, 2021 8:26 SA

Livewire thực hiện yêu cầu AJAX tới máy chủ với dữ liệu được cập nhật

0
thg 1 15, 2021 7:13 SA

bài viết hay!!

0

Mong bạn viết thêm nhiều bài về các hệ thống chăm sóc sức khỏe.

0

Cám ơn bạn nhé.

0

Anh ơi toàn kiến thức bổ ích Spam là Spam thế nào

+1

quá đỉnh 😄

+1

cảm ơn bạn

+1

Đọc cái title cứ tưởng là bài viết Spam

0

sr bạn vì rep muộn. Mình chưa tìm hiểu về cái đó bạn nhé :<

0

Thanks bác, hữu ích ghê!

+1

@dinhcuong2209

chào bạn, mình đã test Private channel authentication với Bearer Token dành cho App Angular (Và cả app Vue - generate bằng vue-cli), nói chung cũng ko khó khăn lắm vài bước là xong.

Đầu tiên mình ko biết bạn đang dùng cơ chế authenticate api kiểu gì, mình giả sử bạn dùng laravel Passport cho phổ biến nhé. Bạn tự follow theo docs của Laravel để setup Laravel passport nhé, sau đó bạn kéo xuống làm theo đoạn Personal Access Token (cái này sẽ cho phép ta có thể generate JWT token cho user mà ko cần qua các bước OAuth lằng nhằng 😄). Sau đó bạn thử tạo 1 route nào đó, và thử generate token cho user xem mọi thứ ổn mới làm tiếp nhé.

Tiếp theo vì là Private channal nên bạn phải mở file config/database.php kéo xuống đoạn config redis sửa prefix lại thành như sau:

'prefix' => env('REDIS_PREFIX', ''),

Vì nếu để mặc định giá trị của đoạn prefix kia (laravel_database_) lát nữa bên frontend mình sẽ ko thể lắng nghe đúng tên channel đc vì bên Laravel Echo Server sẽ liên tục thêm tiền tố private vào tên channel (cái issue này đã có ở trên github của laravel echo server rồi nhé)

Tiếp theo bạn mở app\providers\BroadcastServiceProvider cập nhật lại hàm boot như sau:

    public function boot()
    {
        Broadcast::routes(['middleware' => ['auth:api']]); // auth user bằng API chứ ko qua session nữa

        require base_path('routes/channels.php');
    }

Tiếp đó mở routes/channels.php thêm vào đoạn sau (vì Private channel yêu cầu user phải được phía Laravel authenticate tại thời điểm join channel):

Broadcast::channel('chatroom', function ($user) {
    return true; // luôn luôn cho phép user join channel, bài này mình làm demo thì thế, làm thật bạn cần có logic check ở đây nhé
});

Cuối cùng là quay lại app Angular của bạn và kết nối thôi:

export class AppComponent implements OnInit {
  ngOnInit(): void {
    const echo = new Echo({
      broadcaster: 'socket.io',
      host: window.location.hostname + ':6001',
      auth: {
        headers: {
          Authorization: 'Bearer ' + 'token' 
        }
      }
    })

    echo.private(`chatroom`)
    .listen('MessagePosted', (e: any) => {
        console.log(e);
    })
  }
}

Nhớ là ở file app\Events\MessagePosted là phải dùng PrivateChannel nhé bạn (còn đoạn lưu message xong broadcast thì giữ nguyên y hệt trong bài):

    public function broadcastOn()
    {
        return new PrivateChannel('chatroom');
    }

trước khi test nhớ đóng hết các cửa sổ terminal chạy laravel/laravel echo server (nếu trước đó đã chạy) và chạy chúng lại từ đầu nhé

Thấy terminal nơi chạy Laravel Echo Server như sau là oke rồi nhé:

Screenshot 2021-01-14 at 23.24.49.png

0

Bên Laravel ẹcho server như vậy là nom đúng rồi đó, có event lắng nghe của client khi join vào channel rồi, giờ chỉ là nó ko thấy có job nào ở trong redis thôi -> worker chưa chạy, chưa push message vào redis đc

terminal nơi chạy php artisan queue:work có gì ko hả e? nếu ko có thì khả năng cao là bên Laravel e chưa gọi broadcast(...) hoặc khả năng cao hơn là e đang cấu hình redis sai.

E mở lại file .env kiểm tra lại đoạn sau đã đúng hay chưa nhé:

BROADCAST_DRIVER=redis
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
SESSION_LIFETIME=120

Khả năng cao hơn cả nữa 😄, đó là e chưa cài Redis.

Mở terminal gõ redis-cli xem nhé e

0

cho em hỏi vs ạ,e có đoạn code sau thì khai báo var hay let (let showPassword hay var showPassword) đều giống nhau đúng k ạ let showPassword = false

btnElement.addEventListener('click', togglePassword)

function togglePassword() { if (showPassword) { showPassword = false } else { showPassword = true } }

0

Cảm ơn bạn nhé.

0

@hieuthinh.cse van de no nam o method waitSomeLongerTime(); Cho do anh xu ly ntn

0

em chạy câu lệnh đầu tiên thì nó hiện ra thế này giờ làm sao ạ 'git' is not recognized as an internal or external command, operable program or batch file.

0
thg 1 14, 2021 8:25 SA

hiện tại mô hình mới được huấn luyện trên chứng minh nhân dân nên không được bạn nhé

0

Có vẻ như không chạy được

0

Tuyệt vời bạn ơi, cố gắng duy trì nhé 👍👍👍

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí