摘要:在本教程中,我們將了解如何在應用中使用認證。當用戶通過登錄時,會生成令牌并將其發送給用戶,該用戶可用于身份驗證。提供,可以毫無困難地使用認證。服務提供者我們使用的最新版本,它可以使用包發現并自動注冊服務。
在本教程中,我們將了解如何在 Laravel 應用中使用 laravel passport 認證。 我們還將使用 Laravel Passport 認證 構建一個簡單的產品 (創建, 查詢, 更新和刪除 )。
Laravel 已經提供了傳統的登錄表單身份驗證,但是如果你想使用 APIs 呢?APIs 使用令牌來驗證用戶,因為它們不使用會話。當用戶通過 API 登錄時,會生成令牌并將其發送給用戶,該用戶可用于身份驗證。Laravel 提供 Passport ,可以毫無困難地使用 API 認證。
讓我們看看如何在 Laravel 應用程序中設置和配置用于 API 認證和 RESTful APIs 的 Laravel Passport 。
創建一個新的應用我們新建一個Laravel 應用。 執行下面的命令就可以創建一個全新的laravel應用。
composer create-project --prefer-dist laravel/laravel passport安裝Passport 擴展
我們使用composer 安裝Passport 擴展。 執行下面的命令來安裝這個擴展。
composer require laravel/passportLaravel配置Passport
Laravel Passport 擴展需要做一些配置。
服務提供者我們使用的 Laravel 5.6最新版本,它可以使用包發現并自動注冊服務。如果你使用?laravel 5.4 或者 更低版本,你需要在?config/app.php?文件中為Passport注冊服務。就這樣,在這個文件中的providers數組中添加注冊服務。
"providers" => [ .... LaravelPassportPassportServiceProvider::class, ]遷移和安裝
在.env 文件中設置數據庫憑據。 Laravel Passport 提供了需要在我們的數據庫中的護照表的遷移文件。 Passport遷移用于存儲令牌和客戶端信息。 運行migration 命令以將架構遷移到數據庫。
php artisan migrate
接下來,需要使用以下命令安裝 Passport。 它將生成生成秘密訪問令牌所需的加密密鑰。
php artisan passport:installPassport 配置
在此步驟中,我們需要在 Laravel 應用程序中進行更改以完成 Passport 配置。
app/User.php在你的 ?User?model 中添加?LaravelPassportHasApiTokens?trait 。它將提供一些輔助方法。
AuthServiceProvider在 AuthServiceProvider 的引導方法中添加 Passport :: routes() 方法。 它將生成必要的路由。 這是?app/Providers/AuthServiceProvider.php?在更改后的樣子。
"AppPoliciesModelPolicy", ]; /** * Register any authentication / authorization services. * * @return void */ public function boot() { $this->registerPolicies(); Passport::routes(); } }config/auth.php在?config/auth.php?文件中,將驅動程序設置為 passport。
return [ .... "guards" => [ "web" => [ "driver" => "session", "provider" => "users", ], "api" => [ "driver" => "passport", "provider" => "users", ], ], .... ]創建路由讓我們創建 API 路由,在 routes/api.php?添加路由。
Route::post("login", "PassportController@login"); Route::post("register", "PassportController@register"); Route::middleware("auth:api")->group(function () { Route::get("user", "PassportController@details"); Route::resource("products", "ProductController"); });創建認證控制器讓我們設置身份驗證邏輯。通過運行以下命令創建 Passport 控制器。
php artisan make:controller PassportController將以下代碼復制到?app/Http/Controllers/PassportController.php
validate($request, [ "name" => "required|min:3", "email" => "required|email|unique:users", "password" => "required|min:6", ]); $user = User::create([ "name" => $request->name, "email" => $request->email, "password" => bcrypt($request->password) ]); $token = $user->createToken("TutsForWeb")->accessToken; return response()->json(["token" => $token], 200); } /** * Handles Login Request * * @param Request $request * @return IlluminateHttpJsonResponse */ public function login(Request $request) { $credentials = [ "email" => $request->email, "password" => $request->password ]; if (auth()->attempt($credentials)) { $token = auth()->user()->createToken("TutsForWeb")->accessToken; return response()->json(["token" => $token], 200); } else { return response()->json(["error" => "UnAuthorised"], 401); } } /** * Returns Authenticated User Details * * @return IlluminateHttpJsonResponse */ public function details() { return response()->json(["user" => auth()->user()], 200); } }讓我來解釋一下上面的代碼
在?register?的方法中,我們驗證請求數據然后創建用戶。我們使用 ?createToken?方法創建 token,并將名稱作為參數傳遞。最后,我們在 JSON 響應中返回 token。
在 ?login?方法中,我們嘗試使用請求參數進行身份驗證。然后,根據嘗試的成功或失敗返回適當的響應。
在?details?方法中我們只返回用戶模型。
創建產品 CRUD讓我們創建一個產品的 CRUD。運行以下命令生成產品模型、遷移文件、和控制器。
php artisan make:model Product -mc它將創建一個新的數據庫遷移文件?create_products_table.php?在?database/migrations?文件夾.
將?up?方法更新成以下代碼。public function up() { Schema::create("products", function (Blueprint $table) { $table->increments("id"); $table->integer("user_id"); $table->string("name"); $table->integer("price"); $table->timestamps(); $table->foreign("user_id") ->references("id") ->on("users"); }); }現在, 添加?fillable?屬性到?Product?模型. 打開?app 文件夾下的?Product.php?文件.
現在我們運行數據遷移。
php artisan migrate現在,讓我們在?app/User.php?文件中添加關聯關系方法。
public function products() { return $this->hasMany(Product::class); }打開?app/Http/Controllers 文件夾中的?ProductController.php?文件。復制以下代碼到到產品控制器。
user()->products; return response()->json([ "success" => true, "data" => $products ]); } public function show($id) { $product = auth()->user()->products()->find($id); if (!$product) { return response()->json([ "success" => false, "message" => "Product with id " . $id . " not found" ], 400); } return response()->json([ "success" => true, "data" => $product->toArray() ], 400); } public function store(Request $request) { $this->validate($request, [ "name" => "required", "price" => "required|integer" ]); $product = new Product(); $product->name = $request->name; $product->price = $request->price; if (auth()->user()->products()->save($product)) return response()->json([ "success" => true, "data" => $product->toArray() ]); else return response()->json([ "success" => false, "message" => "Product could not be added" ], 500); } public function update(Request $request, $id) { $product = auth()->user()->products()->find($id); if (!$product) { return response()->json([ "success" => false, "message" => "Product with id " . $id . " not found" ], 400); } $updated = $product->fill($request->all())->save(); if ($updated) return response()->json([ "success" => true ]); else return response()->json([ "success" => false, "message" => "Product could not be updated" ], 500); } public function destroy($id) { $product = auth()->user()->products()->find($id); if (!$product) { return response()->json([ "success" => false, "message" => "Product with id " . $id . " not found" ], 400); } if ($product->delete()) { return response()->json([ "success" => true ]); } else { return response()->json([ "success" => false, "message" => "Product could not be deleted" ], 500); } } }測試現在,我們的邏輯已經完成,讓我們開始測試。 我們將在 PHP 開發服務器上測試它,但你可以根據需要使用虛擬主機。 運行以下命令以在 PHP 開發服務器上提供應用程序。
php artisan serve現在讓我們用測試工具測試我們的API?Postman.
注冊接口
登陸接口
詳情接口
在測試詳情接口或需要用戶進行身份驗證的任何 API 時,你需要指定兩個標頭請求頭信息。 你必須在 Authorization 請求頭中將 token 指定為 Bearer token。 基本上,你必須將登錄和注冊后收到的 token 拼到 Bearer 后面,當中空一個空格。
"headers" => [ "Accept" => "application/json", "Authorization" => "Bearer ". $accessToken, ]產品列表接口
產品添加接口
產品展示接口
產品更新接口
產品刪除接口
本教程的完整代碼可以從 github 獲取?GitHub
文章轉自:https://learnku.com/laravel/t...
更多文章:https://learnku.com/laravel/c...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31408.html
showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區優秀文章 Laravel 5.5+passport 放棄 dingo 開發 API 實戰,讓 API 開發更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項目中使用 - API 文檔撰寫方案 推薦 Laravel API 項目必須使用的 8 個...
摘要:本文來自原文鏈接歡迎作客我們的學習群比如說你要給你的手機用戶創建,使用的是你已有的系統里的數據庫,尤其是用戶數據。 本文來自pilishen.com----原文鏈接; 歡迎作客我們的php&Laravel學習群:109256050 比如說你要給你的手機APP用戶創建API,使用的是你已有的Laravel系統里的數據庫,尤其是用戶數據。現在我們來看一下,這里使用的是Laravel Pas...
摘要:第一部分安裝第一步使用安裝第二步服務提供器使用框架注冊自己的數據庫遷移目錄,因此在注冊提供器后,就應該運行的遷移命令來自動創建存儲客戶端和令牌的數據表第三步接下來,運行命令來創建生成安全訪問令牌時所需的加密密鑰,同時,這條命令也會創建用于生 第一部分 安裝Passport(laravel/passport) 第一步. 使用 Composer 安裝 Passport :composer...
摘要:模糊授權,跟上面的認證碼授權類似,不同的是,我們的資源服務器,返回的直接就是準入令牌,而不是認證碼。 本文來自pilishen.com----原文鏈接; 歡迎來和pilishen一起學習php&Laravel;學習群:109256050 OAuth2是一個安全框架,控制著程序受保護部分的準入,主要是控制不同的客戶端如何來調取API,保證它們在請求相應資源的時候有相應的權限。 Larav...
摘要:最近在寫一個前后端分離項目,本來想用開發的,但是略感笨重,于是想到了的和新出的。更改看守器驅動將配置文件中授權看守器的的選項改為。然后在你的前端請求里需要加入一個參數然后在你需要使用到認證的路由里使用中間件,一切就大功告成啦 最近在寫一個前后端分離項目,本來想用 Jwt-auth + Dingo 開發的,但是略感笨重,于是想到了 Laravel 的 Passport 和 5.5 新出的...
閱讀 1988·2021-11-19 09:40
閱讀 1931·2021-09-28 09:36
閱讀 2279·2021-09-22 10:02
閱讀 2724·2019-08-30 14:00
閱讀 1948·2019-08-29 15:31
閱讀 2893·2019-08-29 15:11
閱讀 2905·2019-08-29 13:04
閱讀 1080·2019-08-27 10:55