這篇文章給大家分享的內容是關於Laravel框架中的Possport Api的認證過程詳解(圖文),內容很詳細,有一定的參考價值,希望可以幫助到有需要的朋友。
1.Laravel透過傳統的登入表單已經讓使用者認證變得很簡單,但是API怎麼辦? API通常使用token進行認證並且在請求之間不維護session狀態。 Laravel使用Laravel Passport
讓API認證變得輕而易舉,Passport基於Alex Bilbie維護的League OAuth2 server,可在數分鐘內為Laravel應用提供完整的OAuth2伺服器實作。
2.安裝
composer require laravel/passport
3.接下來,在設定檔config/app.php
的providers
陣列中註冊Passport
服務提供者:
Laravel\Passport\PassportServiceProvider::class,
4.Passport 遷移將會為應用程式產生用於存放客戶端和存取權杖的資料表(遷移檔案位置/vendor/laravel/passport/database)( 創建相關的表)
php artisan migrate
5.建立產生安全存取權杖時所用到的加密金鑰及私人存取和密碼存取用戶端。
php artisan passport:install
注意:到這裡會有一個問題,就是當你註冊完之後再一次代用註冊接口是回報錯誤,在從新執行一下php artisan passport:install
就OK了
6.Trait
加入到App\User
模型中,這個Trait 會提供這個模型一些輔助函數,用來檢查已認證使用者的令牌和使用作用於。
Laravel\Passport\HasApiTokens
7.然後在AuthServiceProvider
的boot
方法中加入Passport::roues();
8.最後,修改檔案config/auth.php
中api
部分的授權保護項目( driver
)改為passport
。此調整會讓你的應用程式在接收到API 的授權請求時使用Passport 的TokenGuard 來處理
9.增加測試路由api.php
Route::group(['namespace'=>'api'], function(){ // 无需认证路由 Route::match(['get','post'],'/login', 'UserController@login')->name('login'); Route::post('/register', 'UserController@register'); // 需认证路由 Route::group(['middleware' => 'auth:api'], function(){ Route::get('/v1/passport', 'UserController@passport'); }); });
10.增加控制器
php artisan make:controller Api\UserController
<?php namespace App\Http\Controllers\Api; use App\User; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Validator; class UserController extends Controller{ public function __construct(){ $this->content = array(); } public function login(){ //dd(request('name')); if(Auth::attempt(['name' => request('name'), 'password' => request('password')])) { $user = Auth::user(); $this->content['token'] = $user->createToken(request('name'))->accessToken; $status = 200; } else { $this->content['error'] = "未授权"; $status = 401; } return response()->json($this->content, $status); } public function passport(){ return response()->json(['user' => Auth::user()]); } /** * 注册用户创建token */ public function register(Request $request){ $input = $request->all(); $validator = Validator::make($input, [ 'email' => 'required|string|email|max:255|unique:users|min:4', 'password' => 'required|string|min:6', ]); if ($validator->fails()) { return response()->json(['error'=>$validator->errors()], 401); } $input['password'] = bcrypt($input['password']); $user = User::create($input); if( $user !==false){ $success['token'] = $user->createToken($input['name'])->accessToken; $success['email'] = $user->email; $success['uid'] = $user->id; return response()->json(['error_code'=>0,'data'=>$success], 200); } return response()->json(['error_code'=>1,'data'=>$input], 401); } }
11.透過postman進行簡單測試取得token
註冊:
介面位址:http://gems.com/ api/register
登入:http://gems.com/api/login
測試取得使用者資訊:http://gems.com/ api/v1/passport
相關文章推薦:
laravel5.5框架中視圖間如何共享資料?視圖間共享資料的兩種方法(附程式碼)
以上是Laravel框架中的Possport Api的認證過程詳解(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!