Laravel Người bảo vệ là gì?


78

Tôi đã xem qua các bộ điều khiển xác thực được tích hợp sẵn và tôi nhận thấy chúng sử dụng một thứ gọi là "Vệ binh". Cho đến bây giờ bất cứ khi nào tôi thực hiện các biểu mẫu đăng nhập / đăng ký của riêng mình, tôi chưa bao giờ chạm vào chúng và thường chỉ làm những việc như:

Auth::attempt()

mà không có bất kỳ loại bảo vệ. Tôi đã cố gắng tìm kiếm chính xác nó là gì nhưng tôi thực sự không thể tìm thấy bất kỳ thông tin nào về nó, ai đó có thể giải thích cho tôi mục đích của lính canh là gì không?

Câu trả lời:


92

Chúng là định nghĩa về cách hệ thống nên lưu trữ và truy xuất thông tin về người dùng của bạn.

Bạn có thể tìm thấy cấu hình trong config/auth.phptệp của mình . Trình bảo vệ web là kho lưu trữ cookie truyền thống - để bảo vệ web hướng dẫn Laravel lưu trữ và truy xuất thông tin phiên theo cách cổ điển. Mặt khác, người bảo vệ API sử dụng mã thông báo. Vì vậy, bạn sẽ sử dụng API bảo vệ nếu bạn muốn xác thực người dùng và yêu cầu bằng cách sử dụng mã thông báo API trong tiêu đề (bearer) hoặc tham số truy vấn.

Bạn cũng có thể tạo bảo vệ của riêng mình nếu bạn muốn, và cũng có bài đăng blog giới thiệu hay về chủ đề này của Matt Stauffer.


3
Người bảo vệ cũng có thể là người bảo vệ mọi thứ. Giống như ngăn chặn một mã nhỏ mua từ sự kiện: $this->preventMinorsGuard();. Có thể được sử dụng như thế này?
brnmonteiro

9

Bảo vệ là một cách cung cấp logic được sử dụng để xác định người dùng đã xác thực. Laravel cung cấp các bảo vệ khác nhau như phiên và mã thông báo. Người bảo vệ phiên duy trì trạng thái của người dùng trong mỗi yêu cầu bằng cookie và mặt khác, người bảo vệ mã thông báo xác thực người dùng bằng cách kiểm tra mã thông báo hợp lệ trong mọi yêu cầu.


5

Vì tôi có câu hỏi tương tự và các câu trả lời khác không cung cấp cho tôi thông tin tôi đang tìm kiếm (họ giải thích hoàn hảo những gì một người bảo vệ làm, nhưng không phải tại sao bạn phải lo lắng về việc gọi các phương pháp của nó), tôi sẽ cung cấp một câu trả lời khác.

Tôi cũng không chắc về sự khác biệt giữa các phương pháp do người auth()trợ giúp cung cấp và các phương pháp do chính người bảo vệ cung cấp auth()->guard(), vì chúng dường như cũng làm như vậy.

Nhanh chóng dd(auth())tiết lộ rằng nó trả về một thể hiện của AuthManager. Vì vậy, chúng ta có thể tra cứu lớp đó trong mã nguồn : Ở cuối AuthManager.php có một __call() phương thức ma thuật chuyển tiếp tất cả các lệnh gọi không xác định đến guard()phương thức của chính nó .

public function __call($method, $parameters)
{
    return $this->guard()->{$method}(...$parameters);
}

Điều này cho chúng ta thấy rõ ràng rằng các phương pháp của auth()auth()->guard()dường như không chỉ hoạt động giống nhau mà còn hoàn toàn giống nhau . Vì vậy, miễn là nên sử dụng bảo vệ mặc định, bạn ->guard()có thể yên tâm bỏ qua một phần bổ sung .


1

Vai trò bảo vệ là xác thực các tuyến đường

  1. Bảo vệ web sẽ xác thực các tuyến web
  2. Api bảo vệ sẽ xác thực các tuyến api.
  3. Đối với các loại người dùng khác, ví dụ: Người bảo vệ quản trị sẽ xác thực các tuyến quản trị, v.v.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.