Trong bài viết này mình sẽ sử dụng plugin sau:https://github.com/lucadegasperi/oauth2-server-laravel

1. Setup OAuth 2.0 plugin

Cách đơn giản nhất để setup plugin này là thực hiện composer.Trong file composer.json thêm chiếc code tiếp sau đây vào vào mục require.Tiếp theo thì chạy lệnh composer update.

Bạn đang xem: Cài đặt oauth ứng dụng

"require": "ucadegasperi/oauth2-server-laravel": "4.0.x
dev" Khi composer đã cài đặt xong package này bạn phải làm thêm một trong những bước bé dại sau:

Thêm dòng code sau vào mảng providers trong file config/app.php

"LucaDegasperiOAuth2ServerStorageFluentStorageServiceProvider","LucaDegasperiOAuth2ServerOAuth2ServerServiceProvider",Thêm mẫu code sau vào mảng aliases trong file config/app.php"Authorizer" => "LucaDegasperiOAuth2ServerFacadesAuthorizerFacade",Mở file app/Http/Kernel.php

Thêm dòng code sau vào mảng middleware

"LucaDegasperiOAuth2ServerMiddlewareOAuthExceptionHandlerMiddleware"Xóa dòng code sau trong mảng middlewareAppHttpMiddlewareVerifyCsrfToken Thêm cái code sau vào mảng routeMiddleware "csrf" => "AppHttpMiddlewareVerifyCsrfToken",

2. Thiết lập Database cùng test

Đầu tiên họ cần thiết lập database ở tệp tin .env trong thư mục gốc

DB_HOST=localhostDB_DATABASE=Mysql database nameDB_USERNAME=Mysql user nameDB_PASSWORD=Mysql passwordChạy lệnh sau ở terminal để publish cấu hình và migration của package này

php artisan vendor:publishLệnh trên sẽ khởi tạo ra toàn bộ các tệp tin migration mà plugin này cần

Chạy lệnh sau để apply những file migrate vào database

php artisan migrateCấu hình OAuth server

Chúng ta sẽ sử dụng Authorization server với Password Grant.

Mở tệp tin app/config/oauth2.php cùng thêm đoạn code sau vào mảng grant_types

"password" => < "class" => "LeagueOAuth2ServerGrantPasswordGrant", "access_token_ttl" => 604800, // the code to run in order khổng lồ verify the user’s identity "callback" => function($username, $password) $credentials = < "email" => $username, "password" => $password, >; if (Auth::once($credentials)) return Auth::user()->id; else return false; >Chúng ta sẽ nên đến một route để sinh ra token sau khoản thời gian truyền vào username và password, trong tệp tin app/Http/route.php thêm chiếc code sau:

Route::post("oauth/access_token", function() return Response::json(Authorizer::issueAccessToken()););Tạo client

Ở đây nên nói rõ hơn một chút là Client chính là ứng dụng sử dụng OAuth server ví dụ như website, phầm mềm android…Chúng ta vẫn thêm vào trong 1 bảng ghi vào bảng oauth_client trong database.

INSERT INTO "oauth_clients" ("id", "secret", "name", "created_at", "updated_at") VALUES("f3d259ddd3ed8ff3843839b", "4c7f6f8fa93d59c45502c0ae8c4a95b", "Main website", "2015–05–12 21:00:00","0000–00–00 00:00:00");Khi này thì client_id là f3d259ddd3ed8ff3843839b và client_secret là 4c7f6f8fa93d59c45502c0ae8c4a95b

Test OAuth server

Để test OAuth server chúng ta cần REST client nhằm truyền vào request với cách thức POST, bản thân giới thiệu các bạn một plugin của Chrome là PostMan.

Xem thêm: Phim Tựa Như Tình Yêu Phần 2 Full, Tựa Như Tình Yêu 2

Link setup PostMan: https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop

Nhập dữ liệu như mặt dưới

username=test
test.com password = password grant_type=password client_id = GXvOWazQ3lA6YSaFji client_secret =GXvOWazQ3lA.6/YSaFji

*
Bảo mật API endpoints

Để đảm bảo tài nguyên thì bạn phải sử dụng "before" => "oauth" trong route như sau:

Route::get("api", <"before" => "oauth", function() // return the protected resource //echo "success authentication"; $user_id=Authorizer::getResourceOwnerId(); // the token user_id $user=AppUser::find($user_id);// get the user data from databasereturn Response::json($user);>);Chúng ta thường xuyên sử dụng PostMan để test

*

3. Sử dụng token vào Controller

Giả sử chúng ta có một PostController và user đề xuất gửi một token để lấy tất cả những bài post của anh ý ta.Khi đó ta tiến hành theo các bước sau:

Tạo một route và protect nó cùng với oauth, vào app/Http/routes.php thêm cái code sau vào

Route::group(<"prefix"=>"api","before" => "oauth">, function() Route::get("/posts", "PostController
index");Mình đã tạo ra một route group với prefix là api cùng protect toàn bộ các route phía bên trong nó với oauth.

Chú ý: Để truy vấn đươc token thì route đề nghị được protect cùng với oauth

Lấy token owner cùng triệu gọi tin tức user, vào PostController ta thêm đoạn code sau:

use LucaDegasperiOAuth2ServerAuthorizer;public function index(Authorizer $authorizer) $user_id=$authorizer->getResourceOwnerId(); // the token user_id $user=AppUser::find($user_id);// get the user data from database $posts= AppPost::where("user_id", "=", $user->id);Chúng ta cần inject Authorizer $authorizer vào cách làm index nhằm triệu điện thoại tư vấn token nhưng mà user sẽ gửi vào request.

Như vậy là tôi đã hướng dẫn ngừng cách thiết lập và sử dụng OAuth 2.0 vps trong Laravel.Hi vọng nội dung bài viết này để giúp ích cho những bạn.