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.
THẢO LUẬN
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
bài viết hay!!
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.
Cám ơn bạn nhé.
Anh ơi toàn kiến thức bổ ích Spam là Spam thế nào
quá đỉnh![😄](https://twemoji.maxcdn.com/v/14.0.2/72x72/1f604.png)
cảm ơn bạn
Đọc cái title cứ tưởng là bài viết Spam![](https://i.imgur.com/tbSfBAA.gif)
![](https://i.imgur.com/tbSfBAA.gif)
![](https://i.imgur.com/tbSfBAA.gif)
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.php
kéo xuống đoạn config redis sửaprefix
lạ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ố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àmboot
như sau: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):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\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):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:work
có 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
.env
kiể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-cli
xem 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é![👍](https://twemoji.maxcdn.com/v/14.0.2/72x72/1f44d.png)
![👍](https://twemoji.maxcdn.com/v/14.0.2/72x72/1f44d.png)
![👍](https://twemoji.maxcdn.com/v/14.0.2/72x72/1f44d.png)