Asked Jul 13th, 1:11 PM 72 1 2
  • 72 1 2
+1

Hỏi về Role Middleware trong laravel

Share
  • 72 1 2

Bình thường em đùng login mặc định của laravel , phần check role em tạo 1 middleware rồi viết code: if(Auth::user()->role = admin) { .... } Nhưng bây giờ em phải làm login, bằng API, em cũng tạo một middleware như trên nhưng phần gọi Auth::user() ra lại bị null

Theo em thấy là phần login mặc định của laravel là cho phép login rồi -> check role -> nếu role hợp lệ thì ok , không thì redirect back(). còn cái API thì là chưa login đc nên không gọi đc Auth::user().

Cho em hỏi là bây giờ em phải làm sao . (trong bảng user có type = 1 , 2 ,3) nếu bằng 1 => đăng nhập user 2 => đăng nhập ng giao hàng 3 => đăng nhập ng quản trị . Các anh cho em xin giải pháp với ạ?

2 ANSWERS


Answered Jul 14th, 6:20 AM
+1

@nhatnguyen123321
Bạn tìm hiểu về sanctum hỗ trợ authentication cho api trong Laravel nhé.
https://laravel.com/docs/8.x/sanctum

Lý do bạn gọi Auth::user() nó ra null là vì khi bạn gọi api thì trên server ko nhận được cookie ở client truyền lên.
Chính vì thế bạn phải truyền lên 1 cái gì đó khi call api, thì sanctum hỗ trợ cho bạn phần access token, khi bạn truyền
access_token lên thì bạn có thể lấy đc user info thông qua $request->user('sanctum');

Share
Answered Jul 22nd, 5:20 AM
0
  • Đối với web, Laravel căn cứ vào session và cookie để xác định bạn đã đăng nhập hay chưa, đang đăng nhập bằng tài khoản nào.

  • Đối với API, thường mọi người sẽ làm stateless, không còn có session và cookie nữa. Khi đó sẽ cần giải pháp authentication khác như dùng API Token/Access Token, OAuth.. Có nhiều library hỗ trợ implement cho Laravel như: Passport, Sanctum... Cơ chế xử lý có thể khác nhau nhưng bản chất, client (mobile) sẽ gửi request luôn kèm header Authorization chứa Access Token. Đó là căn cứ để server authenticate.

  • Bây giờ bạn cần kiểm tra xem, cái middleware Authentication kia của bạn đã config cho đúng guard của API chưa? Với Laravel, nó hỗ trợ multi-authentication nên cần check chính xác. VD: API bạn dùng guard 'api' mà default là 'web' thì bạn Auth::user() nó sẽ luôn null, thay vào đó phải là Auth::user('api') chẳng hạn.

  • Chọn một cái library như: Passport, Sanctum... hoặc tự viết tùy nhu cầu của bạn.

Share
Viblo
Let's register a Viblo Account to get more interesting posts.