Laravel Sanctum cung cấp một hệ thống xác thực dựa trên mã thông báo đơn giản phù hợp với mọi SPA, tích hợp ứng dụng di động và API. Sanctum cho phép mỗi người dùng ứng dụng của bạn tạo nhiều mã thông báo API cho tài khoản của họ. Các mã thông báo này có thể được cấp khả năng/phạm vi chỉ định hành động nào mà mã thông báo được phép thực hiện
Toàn bộ tuần làm việc này đã được dành để loay hoay với Nativescript, đặc biệt là hương vị Vue với TypeScript, ion và phản ứng bản địa được ném vào đó. Nó khá bực bội ngay cả khi chỉ nhận được các môi trường khác nhau khởi động và chạy cục bộ. Tôi luôn biết rằng cần phải có một loại người đặc biệt để trở thành một kỹ sư di động và tuần này đã chứng minh điều đó với tôi. Và sau đó hãy quên hết những ngôn ngữ "kép" này đi nếu bạn là một kỹ sư bản địa thực sự thì tôi chỉ cần nói rằng bạn là người giỏi hơn tôi. Vì vậy, với tư cách là một công ty, chúng tôi đã quyết định với đội ngũ nhân viên hiện tại của mình và thực tế là chúng tôi muốn một ứng dụng rất đơn giản để tương tác với API của mình, Nativescript-vue đạt được tất cả các điểm cho chúng tôi
Tôi chắc chắn sẽ nói chi tiết hơn về dự án này và chúng tôi sẽ có bản tóm tắt hàng tuần về việc tôi đang cố gắng xây dựng ứng dụng này. Nhưng tuần này có rất nhiều rào cản nhưng có một điều không đổi là bất kể chúng ta sử dụng ngôn ngữ nào, chúng ta sẽ cần ngôn ngữ đó để tương tác với API của mình và chúng ta cần một số cách xác thực tại chỗ. Tại sao thánh đường? . Tất cả đều là các tùy chọn hợp lệ nhưng chúng tôi đã quyết định chọn dấu chân nhỏ của Sanctum. Nếu bạn đã từng cài đặt Passport thì nó rất giống và bạn sẽ không gặp vấn đề gì. Đối với bất kỳ ai chưa bao giờ thực hiện auth, bài đăng này là dành cho bạn. Có một vài bước mà các tài liệu quên đề cập đến nhưng nếu bạn đã thiết lập một cái gì đó trước đó thì bạn sẽ nhớ rất nhanh khi một vài lỗi xuất hiện
Và chuyển sang tài liệu Sanctum. Thực hiện theo các bước cài đặt với một
Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
1Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
2 đơn giản để xuất bản tệp cấu hình và cuối cùng nhưng không kém phần quan trọng. Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
3 và di chuyển các bảng Sanctum mới. Nói chung, bạn sẽ sử dụng trait trên model Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
4 và đưa vào namespace Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
5 và đảm bảo thêm Trait Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
6. Vì vậy, chúng tôi đã thiết lập khá nhiều và bây giờ chỉ cần tạo một tuyến đường / bộ điều khiển, và thực hiện thêm một vài thao tác nhỏ để mọi thứ hoạt động bình thường. Vì vậy, trong tệp
Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
7 [tệp của bạn có thể khác chỉ phụ thuộc vào cách bạn thiết lập định tuyến. Tôi quyết định sử dụng tuyến đường Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
8 và tôi trỏ nó đến một Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
0 mới được tạo. Tôi đã tranh luận về cách gọi hàm trong bộ điều khiển mới được tạo [Tôi không sử dụng cli vừa tạo tệp và sao chép/dán một trong các bộ điều khiển khác của tôi và không gian tên cố định. Gọi tuyến đường/chức năng bất cứ điều gì bạn muốn nó thực sự tùy thuộc vào bạn. Để lại một quả trứng Phục sinh buồn cười? . Nếu bạn cố gắng thực hiện tuyến đường này ngay bây giờ, bạn sẽ nhận được 419 [tuyến đường hết hạn trang], nhưng tại sao? . mã thông báo CSRF. Vì vậy, chúng tôi cần mở Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
1 và thêm tuyến đường đã tạo gần đây của chúng tôi, trong trường hợp của tôi là Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
8 trong mảng except để mã thông báo CSRF không được kiểm traVì vậy, trong chức năng đăng nhập của mình, tôi cần kiểm tra email/mật khẩu dựa trên các giá trị DB. Nếu chúng thực sự đúng, tôi sẽ trả lại mã thông báo, nếu không, hãy trả lại chúng cho ĐỊA NGỤC. Không nhưng thực tế. Thông thường trên một ứng dụng web, nó sẽ chuyển hướng đến đăng nhập nhưng đây là tất cả dành cho ứng dụng dành cho thiết bị di động và tôi không chắc chắn 100% về quy trình cho tình huống đó. Tôi sẽ đi qua cây cầu đó trong vài tuần tới và bạn có thể cá là sẽ có tất cả các cuộc nói chuyện về nó ở đây
public function login[Request $request]
{
$user = User::where['email', $request->email]->first[];
if [! $user || ! Hash::check[$request->password, $user->password]] {
throw ValidationException::withMessages[[
'email' => ['The provided credentials are incorrect.'],
]];
}
return $user->createToken[$request->device_name]->plainTextToken;
}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Vì vậy, đây là con đường tôi đã đi, bạn có thể sử dụng
Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
3 nhận email/mật khẩu và trả về một giá trị boolean, đây chỉ là con đường cụ thể mà tôi đã đi. Vì vậy, trước tiên, email được chuyển vào không có trong DB của chúng tôi, nó sẽ ném ngoại lệ và trả về thông báo lỗi. Tương tự nếu mật khẩu được chuyển vào và mật khẩu được lưu trữ [sử dụng mặt tiền Hash, vì hãy nhớ rằng chúng tôi không thể kiểm tra chúng thường xuyên] cho người dùng hiện tại [bằng email đã chuyển] không khớp. Vì vậy, nếu tất cả đều tốt, chúng tôi sẽ trả lại mã thông báo. Cuối cùng thì bây giờ tôi sẽ biến tất cả những thứ này thành một tài nguyên API tuyệt vời nhưng hiện tại chúng tôi chỉ đảm bảo rằng những điều cơ bản đã được cài đặt. Vì vậy, hãy bắt đầu lộ trình trong POSTMAN bằng email/mật khẩu mà bạn biết là có tác dụng và đổi lại bạn sẽ nhận được một thứ như thế này. Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
4 và nếu tín dụng không khớp, bạn sẽ nhận được trang chủ của chúng tôi. Một lần nữa, tôi cần tùy chỉnh tất cả những thứ này nhưng hiện tại tôi muốn đảm bảo rằng với các khoản tín dụng phù hợp, chúng tôi sẽ nhận được mã thông báo, sau đó thực hiện lộ trình với mã thông báo đó và đảm bảo rằng nó tốtRoute::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Đây là một cách tuyệt vời để kiểm tra mã thông báo và đó là tuyến đường đầu tiên trong tệp
Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
5 của tôi và một lần nữa, điều này có thể khác tùy thuộc vào cách thiết lập tuyến đường của bạn. Vì vậy, bây giờ chúng tôi có một điều nữa cần quan tâm và đó là đặt trình điều khiển API thành 'thánh địa' và điều này có thể được tìm thấy trong tệp cấu hình Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
6. Sau đó, nói chung, chúng tôi sẽ đặt nhà cung cấp thành Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
7 vì đó là nơi tôi đã thêm đặc điểm Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
8Cuối cùng, tôi thêm mã thông báo mới tạo của mình vào Tiêu đề xác thực dưới dạng Mã thông báo người gửi trong người đưa thư và sử dụng tuyến đường để kiểm tra xem mã thông báo của tôi có hợp lệ không.
Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
9 và nếu mã thông báo hợp lệ, nó sẽ trả về người dùng mà mã thông báo đã được tạo cho. Nếu mã thông báo không hợp lệ thì bạn sẽ nhận được trang đăng nhập. Một lần nữa, tôi cần tìm ra quy trình của mọi thứ nhưng tôi có thể xác minh rằng trên thực tế, hệ thống xác thực mới của tôi đang hoạt động. Một điều cần đảm bảo là bất cứ khi nào bạn thực hiện thay đổi đối với tệp cấu hình, bạn sẽ cần chạy Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
10 hoặc Route::middleware['auth:api']->get['/user', function [Request $request] {
return $request->user[];
}];
11 để các giá trị cấu hình mới đó được lưu vào bộ đệm. Vì vậy, đó thực sự là tuần này và một lần nữa nếu bạn từng thiết lập hộ chiếu hoặc bất kỳ loại hệ thống xác thực JWT nào khác cho laravel thì đây có lẽ là một trong những điều tồi tệ nhất mà bạn đã đọc trong bao lâu, vì vậy tôi xin lỗi . Cho đến tuần sau