Tính toàn vẹn và xác thực dữ liệu là những khía cạnh quan trọng của việc phát triển web và thu thập dữ liệu. Điều quan trọng là chúng tôi [với tư cách là nhà phát triển web] xác thực dữ liệu trước khi lưu trữ trong cơ sở dữ liệu. Ví dụ: hãy tưởng tượng rằng bạn đang xây dựng biểu mẫu cho một trang web mới mà khách truy cập có thể sử dụng để đăng ký nhận bản tin email mới của bạn. Tôi chắc chắn rằng bạn muốn đảm bảo rằng bất kỳ ai gửi biểu mẫu đều sử dụng địa chỉ email hợp lệ và không cố gắng thêm bất kỳ địa chỉ thư rác nào. Trong sách điện tử của tôi, Battle Ready Laravel, tôi thực sự đề cập đến cách bạn có thể tìm và cải thiện các điểm yếu khác như thế này trong các ứng dụng Laravel của mình
Chắc chắn, có những điều bạn có thể làm để xác minh email đó, chẳng hạn như gửi email xác nhận để khách truy cập xác nhận rằng họ thực sự muốn đăng ký. Nhưng bạn có thể thực sự muốn xác thực rằng email tồn tại trước khi bạn cố gắng gửi email xác nhận đó
Để làm điều này, bạn có thể sử dụng gói Laravel Mailbox Layer để thiết lập và chạy nhanh chóng
Tại sao không chỉ sử dụng các chức năng PHP tích hợp?
Như bạn đã biết, PHP và Laravel đi kèm với các phương thức có thể được sử dụng để xác thực email. Nhưng những phương pháp này phù hợp hơn để kiểm tra xem cấu trúc của địa chỉ email có đúng không
Ví dụ: giả sử rằng chúng tôi có địa chỉ email sau đây không tồn tại. i-do-not-exist@invalid. com. Nếu chúng tôi xác thực email này bằng cách sử dụng các hàm PHP tích hợp hoặc quy tắc xác thực 'email' của Laravel, thì nó sẽ vượt qua quá trình xác thực. Điều này có thể là do địa chỉ khớp với cấu trúc tiêu chuẩn mà bạn mong đợi đối với một địa chỉ email. Tuy nhiên, vì địa chỉ email không tồn tại, chúng tôi cho rằng việc xác thực không thành công
Vì những lý do này, chúng tôi có thể sử dụng gói Laravel Mailbox Layer để xác thực email, kiểm tra xem địa chỉ có thực sự tồn tại hay không và đảm bảo rằng địa chỉ đó đến từ một nguồn uy tín mà chúng tôi muốn cho phép thông qua. Ví dụ: chúng tôi có thể muốn bỏ qua mọi địa chỉ dùng một lần từ các dịch vụ như Mailinator
Nhận khóa API
Gói Lớp hộp thư của Laravel là một trình bao bọc cho API Lớp hộp thư. Vì vậy, để bắt đầu, bạn cần đăng ký trên trang web của họ và lấy khóa API mới. Khi bạn đã có khóa API của mình, bạn có thể thêm nó vào tệp
1composer require ashallendesign/laravel-mailboxlayer
8 của mình như được hiển thị bên dưới 1MAILBOX_LAYER_API_KEY=your-api-key-here
Cài đặt gói
Bây giờ chúng ta đã thêm khóa API vào tệp
1composer require ashallendesign/laravel-mailboxlayer
8, chúng ta có thể cài đặt gói bằng cách chạy lệnh sau trong thư mục gốc của dự án Laravel của chúng ta 1composer require ashallendesign/laravel-mailboxlayer
Xác thực Địa chỉ Email
Bây giờ chúng tôi đã sẵn sàng để bắt đầu xác thực email
Đối với các ví dụ sau, chúng tôi sẽ giả định rằng chúng tôi có một biểu mẫu đăng ký nhận bản tin trên một trang web
Vì vậy, hãy tưởng tượng rằng chúng ta có bộ điều khiển bên dưới. Hiện tại, nó xác thực địa chỉ email bằng quy tắc 'email' tích hợp sẵn của Laravel và sau đó gửi một công việc để hoàn tất quy trình đăng ký của khách truy cập
1use App\Jobs\CompleteNewsletterSubscription;
2use Illuminate\Http\JsonResponse;
3use Illuminate\Http\Request;
5class NewsletterSubscriptionController extends Controller
8 * Store a new newsletter subscriber.
13 public function store[Request $request]: JsonResponse
16 'email_address' => 'required|email'
19 CompleteNewsletterSubscription::dispatch[];
21 return response[]->json[['success' => true]];
Bây giờ, như tôi đã đề cập trước đó, làm điều này là được và sẽ kiểm tra để đảm bảo rằng địa chỉ email đã được gửi trong yêu cầu. Tuy nhiên, điều này sẽ không kiểm tra xem địa chỉ email có thực sự tồn tại hay không. Tất cả những gì nó làm là kiểm tra xem trường
1use App\Jobs\CompleteNewsletterSubscription;
2use Illuminate\Http\JsonResponse;
3use Illuminate\Http\Request;
5class NewsletterSubscriptionController extends Controller
8 * Store a new newsletter subscriber.
13 public function store[Request $request]: JsonResponse
16 'email_address' => 'required|email'
19 CompleteNewsletterSubscription::dispatch[];
21 return response[]->json[['success' => true]];
0 có ở đó không và chuỗi có tuân theo cấu trúc địa chỉ email không. Vì vậy, chúng ta có thể sử dụng gói Lớp hộp thư của Laravel tại đây để cải thiện phương pháp này và xác thựcTrong mã bên dưới, bạn có thể thấy cách chúng tôi đã sử dụng mặt tiền
1use App\Jobs\CompleteNewsletterSubscription;
2use Illuminate\Http\JsonResponse;
3use Illuminate\Http\Request;
5class NewsletterSubscriptionController extends Controller
8 * Store a new newsletter subscriber.
13 public function store[Request $request]: JsonResponse
16 'email_address' => 'required|email'
19 CompleteNewsletterSubscription::dispatch[];
21 return response[]->json[['success' => true]];
1 để bắt đầu mà không cần phải tạo một đối tượng mới theo cách thủ công hoặc sử dụng phép nội xạ phụ thuộc. Tuy nhiên, nếu bạn cảm thấy thoải mái hơn khi sử dụng các phương pháp đó, vui lòng sử dụng chúngSau khi chúng tôi chạy xác thực Laravel, sau đó chúng tôi chạy phương thức
1composer require ashallendesign/laravel-mailboxlayer
0 để yêu cầu API Lớp hộp thư và trả về kết quả trong một đối tượng 1composer require ashallendesign/laravel-mailboxlayer
1 mà chúng tôi có thể làm việc vớiChúng tôi có thể kiểm tra xem thuộc tính
1composer require ashallendesign/laravel-mailboxlayer
2 có phải là 1composer require ashallendesign/laravel-mailboxlayer
3 không. Nếu có, điều đó có nghĩa là địa chỉ không tồn tại và vì vậy chúng tôi có thể gửi lại lỗi cho khách truy cập để cho họ biết rằng địa chỉ không hợp lệ. Nếu địa chỉ là có thật, tài sản 1composer require ashallendesign/laravel-mailboxlayer
2 sẽ được trả lại là 1composer require ashallendesign/laravel-mailboxlayer
5 1use App\Jobs\CompleteNewsletterSubscription;
2use AshAllenDesign\MailboxLayer\Facades\MailboxLayer;
3use Illuminate\Http\JsonResponse;
4use Illuminate\Http\Request;
6class NewsletterSubscriptionController extends Controller
9 * Store a new newsletter subscriber.
14 public function store[Request $request]: JsonResponse
17 'email_address' => 'required|email'
20 $result = MailboxLayer::check[$request->email_address];
22 if [! $result->smtpCheck] {
23 abort[422, 'The email address is not valid.'];
26 CompleteNewsletterSubscription::dispatch[];
28 return response[]->json[['success' => true]];
Từ chối địa chỉ dùng một lần
Tùy thuộc vào trường hợp sử dụng dự án của bạn và nơi bạn có thể muốn sử dụng xác thực này, bạn có thể muốn từ chối bất kỳ địa chỉ dùng một lần nào. Ví dụ: thật đơn giản để lấy địa chỉ email cho một trang web như Mailinator mà bạn có thể sử dụng để gửi thư rác và bỏ qua khi không cần. Để biết thêm một chút thông tin về địa chỉ email dùng một lần, hãy xem Hướng dẫn dành cho người mới bắt đầu về địa chỉ email dùng một lần của Envato Tuts
Để mở rộng đoạn mã trên, chúng ta chỉ cần kiểm tra xem
1composer require ashallendesign/laravel-mailboxlayer
6 có phải là 1composer require ashallendesign/laravel-mailboxlayer
5 không. Nếu đó là 1composer require ashallendesign/laravel-mailboxlayer
5 thì chúng tôi biết rằng địa chỉ này chỉ dùng một lần và chúng tôi có thể từ chối quyền truy cập. Hãy xem nó trông như thế nào trong phương thức điều khiển của chúng ta 1composer require ashallendesign/laravel-mailboxlayer
3Thêm bộ nhớ đệm để cải thiện hiệu suất
Mỗi lần bạn đưa ra yêu cầu đối với API lớp hộp thư, bạn sẽ tiến thêm một bước để đạt đến giới hạn điều tiết API của mình. Vì vậy, bạn càng thực hiện ít yêu cầu thì càng tốt. Vì lý do này, có thể hữu ích khi kích hoạt cơ chế bộ nhớ đệm được tích hợp sẵn trong gói. Bằng cách này, bất cứ khi nào một yêu cầu được thực hiện, kết quả sẽ được lưu trong bộ đệm. Bằng cách này, bạn sẽ không cần phải thực hiện một yêu cầu khác trong tương lai cho cùng một địa chỉ
Để thêm bộ nhớ đệm vào gói, đơn giản như sử dụng phương pháp
1composer require ashallendesign/laravel-mailboxlayer
9 trước khi chúng tôi chạy 1composer require ashallendesign/laravel-mailboxlayer
0. Điều này hướng dẫn gói lưu trữ kết quả trong bộ đệm của bạn sau khi được tải xuống từ API. Điều này có nghĩa là lần tới khi bạn muốn xác thực cùng một địa chỉ email đó, gói sẽ kiểm tra bộ đệm của bạn trước để xem liệu kết quả được lưu trong bộ đệm đã tồn tại ở đó chưa. Nếu có, nó sẽ trả lại. Nếu không, một yêu cầu khác sẽ được thực hiệnTại đây, bạn có thể thấy cách chúng tôi mở rộng mã phương thức của bộ điều khiển để sử dụng bộ nhớ đệm
1composer require ashallendesign/laravel-mailboxlayer
6Tính năng cụ thể này có thể không quá hữu ích đối với những thứ như biểu mẫu đăng ký bản tin như đã đề cập ở trên. Điều này là do không có khả năng ai đó sẽ cố gắng đăng ký nhận bản tin nhiều lần. Nhiều khả năng đó sẽ là hành động một lần
Vì vậy, tính năng này sẽ có lợi hơn cho những thứ như nhập CSV vào hệ thống Laravel của bạn. Để giúp hiển thị các lợi ích của tính năng này, hãy tưởng tượng rằng bạn cần nhập tệp CSV có 1.000 người dùng vào một hệ thống và địa chỉ email của họ không phải là duy nhất. Giả sử rằng trong số 1.000 người dùng, thực tế chỉ có 600 địa chỉ duy nhất. Như bạn đã đoán, sẽ tốt hơn nhiều nếu chỉ phải thực hiện 600 yêu cầu API thay vì 1.000. Nó sẽ làm giảm cơ hội đạt đến giới hạn API và nó cũng sẽ cải thiện hiệu suất vì việc tìm nạp từ bộ nhớ cache rất tốt và nhanh chóng
Tiếp theo là gì?
Nếu bạn nghĩ rằng bạn có thể đang sử dụng loại xác thực email này trong nhiều phần của ứng dụng của mình, bạn nên tạo quy tắc xác thực Laravel của riêng mình. Bằng cách tạo một cái, sau đó bạn có thể sử dụng nó trong phương pháp
1use App\Jobs\CompleteNewsletterSubscription;
2use Illuminate\Http\JsonResponse;
3use Illuminate\Http\Request;
5class NewsletterSubscriptionController extends Controller
8 * Store a new newsletter subscriber.
13 public function store[Request $request]: JsonResponse
16 'email_address' => 'required|email'
19 CompleteNewsletterSubscription::dispatch[];
21 return response[]->json[['success' => true]];
1 của mình để giữ cho mã KHÔ. Điều đó có nghĩa là sau đó bạn có thể xóa các câu lệnh 'nếu' bổ sung trong mã của mình và tự tin rằng tất cả quá trình xác thực đều được xử lý theo quy tắc xác thực của riêng bạn. Điều này cũng có nghĩa là nếu bạn muốn xác thực email ở một nơi khác trong ứng dụng của mình, bạn có thể đưa quy tắc vào trình xác thực mới của mình để thiết lập và chạy nhanh chóngHãy để lại nhận xét về bài viết nếu bạn muốn có hướng dẫn tiếp theo cho hướng dẫn này về cách tạo loại quy tắc xác thực email này
Kiểm tra nó trên GitHub
Tất cả mã và tài liệu đầy đủ cho gói này đều có thể được tìm thấy trong kho lưu trữ của gói trên GitHub. Vui lòng đến đó và kiểm tra mã hoặc thực hiện bất kỳ đóng góp nào để cải thiện nó