Yêu cầu thg 7 13, 2021 1:11 CH 126 1 2
  • 126 1 2
+1

Hỏi về Role Middleware trong laravel

Chia sẻ
  • 126 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 CÂU TRẢ LỜI


Đã trả lời thg 7 14, 2021 6:20 SA
+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');

Chia sẻ
Đã trả lời thg 7 22, 2021 5:20 SA
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.

Chia sẻ
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í