Xác thực API của Laravel mà không cần Hộ chiếu

Trong bài viết này, trong khi phát triển Rest API với Laravel Framework, chúng ta sẽ xác thực với Laravel Passport, gói chính thức của Laravel

Khái niệm xác thực có một vị trí rất quan trọng trong quy trình phát triển ứng dụng. Các ngôn ngữ lập trình khác nhau chứa các giải pháp và cách tiếp cận khác nhau. Trong bài viết này, trong khi phát triển Rest API với Laravel Framework, chúng ta sẽ xác thực với Laravel Passport, gói chính thức của Laravel

Mục lục

Laravel là gì

Laravel là một framework PHP được sử dụng để phát triển các ứng dụng web. Laravel bao gồm nhiều tính năng nâng cao và có nhiều tính năng hữu ích của PHP và OOP. Phương châm của Laravel, được sử dụng bởi nhiều đối tượng, là. “Khung PHP của các nghệ sĩ web”. Bạn có thể truy cập tài liệu chính thức từ liên kết này. https. // ấu trùng. com/

Tại sao lại là Laravel

Nó được nhiều nhà phát triển ưa thích vì nó bắt kịp với sự thay đổi nhanh chóng của Công nghệ phần mềm và cung cấp cho chúng tôi các nguyên tắc phần mềm và giúp chúng tôi tránh khỏi hầu hết các công việc thủ công (Xác thực, Phần mềm trung gian, ORM, MVC) cần thiết để phát triển dự án nhanh chóng

Hộ chiếu Laravel là gì

Đây là gói Laravel chính thức tạo điều kiện xác thực trong API còn lại và được viết bằng Laravel

Tạo một ứng dụng soạn sẵn

Trong phần này, chúng ta sẽ từng bước phát triển ứng dụng Rest API trong Laravel và xem xét việc sử dụng Passport

Cài đặt Laravel

Trước hết chúng ta cài đặt Laravel Framework trên máy tính thông qua Composer. Nếu bạn chưa có Composer trên máy tính, bạn có thể tải xuống từ liên kết này ( https. //getcomposer. tổ chức/)

1

2

3

 

nhà soạn nhạc tạo-dự án --prefer-dist laravel/laravel blog

    

Cài đặt hộ chiếu

Chúng tôi sẽ cài đặt Passport trên máy tính của mình thông qua Composer. Sau đó, chúng tôi sẽ thực hiện thiết lập cơ sở dữ liệu và mã thông báo mặc định bằng hai lệnh cuối cùng

1

2

3

4

5

6

 

nhà soạn nhạc yêu cầu laravel/hộ chiếu

 

php nghệ nhân di cư

php nghệ nhân hộ chiếu. cài đặt

    

Định cấu hình hộ chiếu

Trong bước này, chúng tôi sẽ thiết lập cài đặt Hộ chiếu. Chúng tôi tạo ba tệp phần mở rộng php khác nhau và dán các mã sau

Tập tin. ứng dụng/người dùng. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

 

        //ứng dụng/Người dùng. php

 

        không gian tên Ứng dụng;

        sử dụng Chiếu sáng\Thông báo\Notifiable;

        sử dụng Chiếu sáng\Hợp đồng\Auth\MustVerifyEmail;

        sử dụng Laravel\Hộ chiếu\HasApiTokens;

        sử dụng Chiếu sáng\Nền tảng\Auth\User as Authenticatable;

        

        lớp Người dùng mở rộng Có thể xác thực implements MustVerifyEmail

        {

            sử dụng HasApiTokens, Phải thông báo;

            /**

* Các thuộc tính có thể gán hàng loạt

*

* Mảng @var

*/

            được bảo vệ $có thể điền = [

                        'tên', 'email',< 'password',

            ];

        

            /**

* Các thuộc tính cần ẩn cho mảng

*

* Mảng @var

*/

            được bảo vệ $ẩn = [

                        'mật khẩu', 'remember_token',<

            ];

        }

    

Tập tin. ứng dụng/Nhà cung cấp/AuthServiceProvider. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

 

        //app/Providers/AuthServiceProvider. php

        không gian tên Ứng dụng\Nhà cung cấp;

 

        sử dụng Laravel\Hộ chiếu\Passport;

        sử dụng Chiếu sáng\Hỗ trợ\Facades\Gate;

        sử dụng Chiếu sáng\Nền tảng\Support\Providers\AuthServiceProvider as ServiceProvider;

 

        lớp AuthServiceProvider mở rộng ServiceProvider

        {

            /**

* Các ánh xạ chính sách cho ứng dụng

*

* Mảng @var

*/

            được bảo vệ $chính sách = [

                'App\Model' =&gt; 'App\Policies\ModelPolicy',

            ];

 

            /**

* Đăng ký bất kỳ dịch vụ xác thực / ủy quyền nào

*

* @return vô hiệu

*/

            chức năng công khai khởi động()

            {

                        $cái này-&gt;registerPolicies();

            }

        }

    

Tập tin. cấu hình/xác thực. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

 

        //config/auth. php

        trả lại [

            //.

            'bảo vệ' =&gt; [

                        'web' =&gt; [

                    'driver' =&gt; 'session',

 

                    'nhà cung cấp' =&gt; 'users',

                ],

                        'api' =&gt; [

                    'driver' =&gt; 'passport',

                    'nhà cung cấp' =&gt; 'users',

                ],

            ],

            //.

        ]

 

    

Thêm bảng sản phẩm và mô hình

Đầu tiên chúng ta chạy lệnh sau để thực hiện quá trình di chuyển cơ sở dữ liệu

1

2

3

 

        php nghệ nhân làm. di chuyển tạo_sản phẩm_ bảng

    

Sau khi chạy lệnh này, một tệp có tên “database/migrations” sẽ được tạo trong thư mục dự án. Dán các mã bên dưới vào tệp này

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

 

        sử dụng Chiếu sáng\Hỗ trợ\Facades\Schema;

        sử dụng Chiếu sáng\Cơ sở dữ liệu\Schema\Blueprint;

        sử dụng Chiếu sáng\Cơ sở dữ liệu\Migrations\Migration;

 

        lớp CreateProductsTable mở rộng Di chuyển

        {

            /**

* Chạy di chuyển

*

* @return vô hiệu

*/

            chức năng công khai lên()

            {

                Lược đồ. tạo('sản phẩm', function (Blueprint $table) {

                    $bàn-&gt;bigIncrements('id');

                    $bàn-&gt;string('name');

                    $bàn-&gt;text('detail');

                    $bàn-&gt;timestamps();

                });

            }

 

            /**

* Đảo ngược di cư

*

* @return vô hiệu

*/

            chức năng công khai xuống()

            {

                Lược đồ. dropIfExists('products');

            }

        }

    

Sau khi tạo migration chúng ta chạy lệnh sau

1

2

3

 

        php nghệ nhân di cư

    

Chúng tôi đã tạo bảng “Sản phẩm” và bây giờ chúng tôi sẽ tạo mô hình sản phẩm của mình. Chúng tôi tạo một tệp có tên là Sản phẩm. php” trong thư mục dự án và dán đoạn mã sau

Tập tin. ứng dụng/Sản phẩm. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

        //ứng dụng/Sản phẩm. php

        không gian tên Ứng dụng;

        sử dụng Chiếu sáng\Cơ sở dữ liệu\Eloquent\Model;

        lớp Sản phẩm mở rộng Mô hình

        {

            /**

* Các thuộc tính có thể gán hàng loạt

*

* Mảng @var

*/

            được bảo vệ $có thể điền = [

                        'tên', 'chi tiết'

            ];

        }

    

Tạo các tuyến API

Trong bước này, chúng tôi sẽ tạo các tuyến API. Laravel cung cấp một api. tệp php để viết các tuyến dịch vụ web. Vì vậy, hãy thêm một tuyến đường mới vào tệp đó

Tập tin. tuyến đường/api. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 

        //tuyến đường/api. php

        /*

        . --------------------------------------------------

        . Định tuyến API

        . --------------------------------------------------

        

        . Đây là nơi bạn có thể đăng ký các tuyến API cho ứng dụng của mình. Này

        . các tuyến được tải bởi RouteServiceProvider trong một nhóm

        . được chỉ định nhóm phần mềm trung gian "api". Tận hưởng việc xây dựng API của bạn

        

*/

        Tuyến đường. bài đăng('đăng ký', 'API\[email protected]');

        Tuyến đường. bài đăng('đăng nhập', 'API\[email protected]');

        Tuyến đường. phần mềm trung gian('auth. api')-&gt;group( function () {

            Tuyến đường. tài nguyên('sản phẩm', 'API\ProductController');

        });

    

Tạo tập tin điều khiển

Trong bước này, chúng tôi sẽ tạo ba Bộ điều khiển là BaseController, ProductController và RegisterController, nơi chúng tôi sẽ tạo các API còn lại của mình. Dán các mã bên dưới

Tập tin. ứng dụng/Http/Bộ điều khiển/API/Bộ điều khiển cơ sở. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

 

        //app/Http/Controllers/API/BaseController. php

        không gian tên Ứng dụng\Http\Controllers\API;

        sử dụng Chiếu sáng\Http\Request;

        sử dụng Ứng dụng\Http\Controllers\Controller as Controller;

 

        lớp BaseController mở rộng Controller

        {

            /**

* phương pháp phản hồi thành công

*

* @return \Illuminate\Http\Response

*/

 

            chức năng công khai gửi phản hồi($result, $message)

            {

                        $phản hồi = [

                    'success' =&gt; true,

                    'data'    =&gt; $result,

                    'thông báo' =&gt; $message,

                ];

                        trả lại phản hồi()-&gt;json($response, 200);

            }

 

            /**

* trả về phản hồi lỗi

*

* @return \Illuminate\Http\Response

*/

 

            hàm công khai lỗi gửi($error, $errorMessages = [], $code = 404)

            {

                        $phản hồi = [

                    'success' =&gt; false,

                    'thông báo' =&gt; $error,

                ];

 

                nếu(. trống($Thông báo lỗi)){

                    $phản hồi['data'] = $errorMessages;

                }

                        trả lại phản hồi()-&gt;json($response, $code);

            }

        }

    

Tập tin. ứng dụng/Http/Bộ điều khiển/API/RegisterController. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

 

        //app/Http/Controllers/API/RegisterController. php

        không gian tên Ứng dụng\Http\Controllers\API;

 

        sử dụng Chiếu sáng\Http\Request;

        sử dụng Ứng dụng\Http\Controllers\API\BaseController as BaseController;

        sử dụng Ứng dụng\Người dùng;

        sử dụng Chiếu sáng\Hỗ trợ\Facades\Auth;

        sử dụng Trình xác thực;

 

        lớp RegisterController mở rộng BaseController

        {

            /**

* Đăng ký api

*

* @return \Illuminate\Http\Response

*/

            chức năng công khai đăng ký(Request $request)

            {

                        $trình xác thực = Trình xác thực::thực hiện($yêu cầu-&gt;all(), [

                    'name' =&gt; 'required',

                    'email' =&gt; 'required|email',

                    'password' =&gt; 'required',

                    'c_password' =&gt; 'required|same:password',

                ]);

 

                        nếu($người xác thực-&gt;fails()){

                    return $this-&gt;sendError('Validation Error.', $trình xác thực-&gt;errors());      

                }

 

                        $đầu vào = $request-&gt;all();

                        $đầu vào['mật khẩu'] = bcrypt($input['password']);

                        $người dùng = Người dùng::tạo($đầu vào);

                        $thành công['token'] =  $user-&gt;createToken('MyApp')-&gt;accessToken;

                        $thành công['name'] =  $user-&gt;name;

 

                        trả lại $cái này-&gt;sendResponse($success, 'User register successfully.');

            }

 

            /**

* Đăng nhập api

*

* @return \Illuminate\Http\Response

*/

            chức năng công khai đăng nhập(Request $request)

            {

                        nếu(Xác thực. thử(['email' =&gt; $request-&gt;email, 'password' =&gt; $request-&gt;password])){

                    $người dùng = Xác thực::người dùng();

                    $thành công['token'] =  $user-&gt;createToken('MyApp')-&gt; accessToken;

                    $thành công['name'] =  $user-&gt;name;

 

                    return $this-&gt;sendResponse($success, 'User login successfully.');

                }

                khác{

                    return $this-&gt;sendError('Unauthorised.', ['lỗi'=&gt;'Unauthorised']);

                }

            }

        }

    

Tập tin. ứng dụng/Http/Bộ điều khiển/API/ProductController. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

 

        //app/Http/Controllers/API/ProductController. php

        không gian tên Ứng dụng\Http\Controllers\API;

        sử dụng Chiếu sáng\Http\Request;

        sử dụng Ứng dụng\Http\Controllers\API\BaseController as BaseController;

        sử dụng Ứng dụng\Sản phẩm;

        sử dụng Trình xác thực;

        sử dụng Ứng dụng\Http\Resources\Product as ProductResource;

 

        lớp ProductController mở rộng BaseController

        {

            /**

* Hiển thị danh sách tài nguyên

*

* @return \Illuminate\Http\Response

*/

            chức năng công khai chỉ mục()

            {

                        $sản phẩm = Sản phẩm::tất cả();

 

                        trả lại $cái này-&gt;sendResponse(ProductResource::bộ sưu tập($sản phẩm) . ', 'Products retrieved successfully.');

            }

 

            /**

* Lưu trữ tài nguyên mới được tạo trong bộ lưu trữ

*

* @param  \Illuminate\Http\Request  $request

* @return \Illuminate\Http\Response

*/

            chức năng công khai cửa hàng(Request $request)

            {

                        $đầu vào = $request-&gt;all();

 

                        $trình xác thực = Trình xác thực::tạo($đầu vào, [

                    'name' =&gt; 'required',

                    'detail' =&gt; 'required'

                ]);

 

                        nếu($người xác thực-&gt;fails()){

                    return $this-&gt;sendError('Validation Error.', $trình xác thực-&gt;errors());      

                }

 

                        $sản phẩm = Sản phẩm::tạo($đầu vào);

 

                        trả lại $cái này-&gt;sendResponse(new ProductResource($product), 'Product created successfully.');

            }

 

            /**

* Hiển thị tài nguyên được chỉ định

*

* @param  int  $id

* @return \Illuminate\Http\Response

*/

 

            chức năng công khai hiển thị($id)

            {

                        $sản phẩm = Sản phẩm::tìm($id);

                        if (is_null($product)) {

                    return $this-&gt;sendError('Product not found.');

                }

 

                        trả lại $cái này-&gt;sendResponse(new ProductResource($product), 'Product retrieved successfully.');

            }

 

            /**

* Cập nhật tài nguyên được chỉ định trong bộ lưu trữ

*

* @param  \Illuminate\Http\Request  $request

* @param  int  $id

* @return \Illuminate\Http\Response

*/

 

            chức năng công khai cập nhật(Request $request, Product $product)

            {

                        $đầu vào = $request-&gt;all();

 

                        $trình xác thực = Trình xác thực::tạo($đầu vào, [

                    'name' =&gt; 'required',

                    'detail' =&gt; 'required'

                ]);

 

                        nếu($người xác thực-&gt;fails()){

                    return $this-&gt;sendError('Validation Error.', $trình xác thực-&gt;errors());      

                }

 

                        $sản phẩm-&gt;name = $input['name'];

                        $sản phẩm-&gt;detail = $input['detail'];

                        $sản phẩm-&gt;save();

 

                        trả lại $cái này-&gt;sendResponse(new ProductResource($product), 'Product updated successfully.');

            }

 

            /**

* Xóa tài nguyên đã chỉ định khỏi bộ lưu trữ

*

* @param  int  $id

* @return \Illuminate\Http\Response

*/

            hàm công khai hủy(Product $product)

            {

                        $sản phẩm-&gt;delete();

                        trả lại $cái này-&gt;sendResponse([], 'Product deleted successfully.');

            }

        }

    

Tạo tài nguyên API Eloquent

Eloquent API sẽ giúp chúng tôi tạo bố cục phản hồi giống như đối tượng mô hình của bạn. Chúng tôi đã sử dụng nó trong tệp ProductController

1

2

3

 

        php nghệ nhân làm. tài nguyên Sản phẩm

    

Bây giờ có tệp mới được tạo với một thư mục mới trên đường dẫn sau

Tập tin. ứng dụng/Http/Tài nguyên/Sản phẩm. php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

 

        //ứng dụng/Http/Tài nguyên/Sản phẩm. php

 

        không gian tên Ứng dụng\Http\Resources;

        sử dụng Chiếu sáng\Http\Resources\Json\JsonResource;

        lớp Sản phẩm mở rộng JsonResource

        {

            /**

* Chuyển đổi tài nguyên thành một mảng

*

* @param  \Illuminate\Http\Request  $request

* @return mảng

*/

            hàm công khai toArray($request)

            {

                trả lại [

                    'id' =&gt; $this-&gt;id,

                    'name' =&gt; $this-&gt;name,

                    'detail' =&gt; $this-&gt;detail,

                    'created_at' =&gt; $this-&gt;created_at-&gt;format('d/m/Y'),

                    'updated_at' =&gt; $this-&gt;updated_at-&gt;format('d/m/Y'),

                ];

            }

        }

    

ứng dụng thử nghiệm

Để kiểm tra ứng dụng của chúng tôi, trước tiên chúng tôi sẽ chạy nó trong môi trường cục bộ bằng lệnh bên dưới. Sau đó, chúng tôi sẽ kiểm tra API Restful của mình thông qua Postman

1

2

3

 

php nghệ nhân phục vụ

    

Sau khi chạy ứng dụng, chúng tôi thực hiện các bài kiểm tra của mình với Postman. Bạn có thể xem ảnh chụp màn hình

Đăng ký API. động từ. NHẬN, URL. http. //máy chủ cục bộ. 8000/api/đăng ký

Xác thực API của Laravel mà không cần Hộ chiếu

API đăng nhập. động từ. NHẬN, URL. http. //máy chủ cục bộ. 8000/api/đăng nhập

Xác thực API của Laravel mà không cần Hộ chiếu

API tạo sản phẩm. động từ. BÀI ĐĂNG, URL. http. //máy chủ cục bộ. 8000/api/sản phẩm

Xác thực API của Laravel mà không cần Hộ chiếu

API hiển thị sản phẩm. động từ. NHẬN, URL. http. //máy chủ cục bộ. 8000/api/products/{id}

Xác thực API của Laravel mà không cần Hộ chiếu

Phần kết luận

Trong bài viết này, chúng tôi đã làm cho Rest API của mình an toàn hơn bằng cách sử dụng Passport với Laravel rất nhanh với yếu tố tốc độ, đây là tính năng lớn nhất mà Laravel cung cấp cho các nhà phát triển. Hy vọng thông tin này sẽ hữu ích

Làm cách nào để thêm xác thực vào API REST trong Laravel?

Tạo API REST trong Laravel với xác thực bằng Passport .
Cài đặt Laravel
Cài đặt hộ chiếu
Định cấu hình hộ chiếu
Thêm bảng sản phẩm và mô hình
Tạo các tuyến API
Tạo tập tin điều khiển
Tạo tài nguyên API Eloquent
ứng dụng thử nghiệm

Tại sao tôi nên sử dụng Laravel Passport?

Hộ chiếu Laravel hợp lý hóa bảo mật và cho phép bạn tạo Mã thông báo xác thực để cung cấp xác thực cho người dùng . Nhiều hệ thống kỹ thuật số ngày nay yêu cầu xác thực người dùng để truy cập tài nguyên. Trong bài viết này, chúng ta sẽ làm sáng tỏ Laravel Passport package để xác thực các API của ứng dụng.

Xác thực nào tốt nhất cho Laravel?

Theo mặc định, Laravel bao gồm một mô hình App\User Eloquent trong thư mục ứng dụng của bạn. Mô hình này có thể được sử dụng với trình điều khiển xác thực Eloquent mặc định. Nếu ứng dụng của bạn không sử dụng Eloquent, bạn có thể sử dụng trình điều khiển xác thực cơ sở dữ liệu sử dụng trình tạo truy vấn Laravel.

Làm cách nào để xác thực trang đăng nhập web bằng API trong Laravel?