Laravel Sanctum kiểm tra xem mã thông báo có hợp lệ không

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[];
}];
1

Route::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 tra

Vì 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ốt

Route::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[];
}];
8

Cuố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

Làm cách nào để nhận mã thông báo từ khu bảo tồn laravel?

Làm cách nào để nhận mã thông báo truy cập hiện tại trong Sanctum? .
Thạc sĩ Laracast. Kiếm được sau khi hoàn thành 1000 bài học Laracasts
Gia sư Laracast. Kiếm được khi số phần thưởng "Trả lời hay nhất" của bạn là 100 trở lên
Laracast Sensei. Kiếm được khi điểm kinh nghiệm của bạn vượt qua 1 triệu
Top 50. .
Trò chuyện Cathy

Làm cách nào để lấy id người dùng từ mã thông báo trong khu bảo tồn laravel?

$token = PersonalAccessToken. where['token', $hashedToken]->first[]; Sau khi tìm nạp mã thông báo, bạn chỉ cần sử dụng $token->tokenable để nhận mã thông báo thuộc về người dùng.

Khu bảo tồn laravel có sử dụng JWT không?

Có vì cả Laravel passport và Laravel sanctum đều sử dụng JWT để ủy quyền và không vì bản thân framework của Laravel không liên quan gì đến JWT.

Làm thế nào an toàn là khu bảo tồn laravel?

Laravel Sanctum cung cấp một hệ thống xác thực gọn nhẹ, an toàn, cực kỳ nhanh, dành cho các ứng dụng một trang [SPA], ứng dụng di động và các API đơn giản, dựa trên mã thông báo. Sanctum is a profound package that allows every user to generate multiple API tokens for their account independently.

Chủ Đề