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:
publicfunctionboot(){Broadcast::routes(['middleware'=>['auth:api']]);// auth user bằng API chứ ko qua session nữarequirebase_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){returntrue;// 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:
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é:
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.
Cho em hỏi . Giải sử giờ em khởi tạo một server elastissearch thì cấu trúc nó sẽ ra sao ạ . Có phải nó là 1 cluster bào gồm 1 node và trong mỗi node là nhiều shard . và em có đọc nhiều tài liệu có nói là có thể mở rộng node vậy ở đâu mặc định ban đầu có bao nhiêu node và muốn khởi tạo thêm node thì làm thế nào ạ ?
như vậy có vẻ không được, vì mình chỉ có 1 domain thôi mà domain chính nó đã nhận là fontend rồi
bạn muốn tách có thể dùng subdomain thôi. hoặc xóa cái api mặc định của laravel đi, rồi cấu hình nginx đổi backend thành api
THẢO LUẬN
sr bạn vì rep muộn. Mình chưa tìm hiểu về cái đó bạn nhé :<
Thanks bác, hữu ích ghê!
@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.phpkéo xuống đoạn config redis sửaprefixlại thành như sau: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ốprivatevà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\BroadcastServiceProvidercập nhật lại hàmbootnhư sau:Tiếp đó mở
routes/channels.phpthê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):Cuối cùng là quay lại app Angular của bạn và kết nối thôi:
Nhớ là ở file
app\Events\MessagePostedlà 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):Thấy terminal nơi chạy Laravel Echo Server như sau là oke rồi nhé:
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:workcó gì ko hả e? nếu ko có thì khả năng cao là bên Laravel e chưa gọibroadcast(...)hoặc khả năng cao hơn là e đang cấu hình redis sai.E mở lại file
.envkiểm tra lại đoạn sau đã đúng hay chưa nhé:Khả năng cao hơn cả nữa
, đó là e chưa cài Redis.
Mở terminal gõ
redis-clixem nhé echo 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 } }
Install git về nha bạn https://youtu.be/Gh7PL17OXPc
Cảm ơn bạn nhé.
@hieuthinh.cse van de no nam o method waitSomeLongerTime(); Cho do anh xu ly ntn
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.
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é
Có vẻ như không chạy được
Tuyệt vời bạn ơi, cố gắng duy trì nhé


hay quá bạn ơi
Cho em hỏi . Giải sử giờ em khởi tạo một server elastissearch thì cấu trúc nó sẽ ra sao ạ . Có phải nó là 1 cluster bào gồm 1 node và trong mỗi node là nhiều shard . và em có đọc nhiều tài liệu có nói là có thể mở rộng node vậy ở đâu mặc định ban đầu có bao nhiêu node và muốn khởi tạo thêm node thì làm thế nào ạ ?
như vậy có vẻ không được, vì mình chỉ có 1 domain thôi mà domain chính nó đã nhận là fontend rồi bạn muốn tách có thể dùng subdomain thôi. hoặc xóa cái api mặc định của laravel đi, rồi cấu hình nginx đổi backend thành api
Khi em tạo mới tin nhắn thì thằng laravel-echo-server không bắn event ra là bị lỗi j a nhỉ
Em cũng có chạy lệnh php artisan queue:work
Đây là file laravel-echo-server.json ạ
Bài viết rất bổ ích
Cảm ơn tác giả!
Mình cũng không chạy dc
Cái này có dùng để lấy dữ liệu thẻ căn cước công dân được không bạn?
Cảm ơn tác giả... Nhưng bài viết còn hơi sơ sài, nếu mọi người muốn tìm hiểu thêm thông tin có thể tham khảo ở đây : https://testerprovn.com/kiem-thu-blockchain/