本章主要介紹前後端徹底分離時,如何使用laravel實現API認證,(laravel5.5)
首先,你得有一個laravel專案,拉取新框架命令:composer create-project laravel/laravel 專案名稱 --prefer-dist "5.5.*"
Beginning:
1.安裝Jwt-auth擴充套件包。composer require tymon/jwt-auth
2.安裝完成後在配置檔案 config/app.php 中註冊服務提供者和別名。
...
'providers' => [
...
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,
]
...
'aliases' => [
...
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
]
3.釋出資源和配置。php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
4.在釋出的配置中生成key。php artisan jwt:generate
不出意外,上述命令會報錯。
這時你需要在vendor / tymon / jwt-auth/src / Commands中的JWTGenerateCommand.php中
寫入public function handle() { $this->fire(); }
如:
5.再次執行 php artisan jwt:generate
6.編輯 app/Http/Kernel.php 新增 jwt.auth 和 jwt.refresh 到應用路由中介軟體陣列:
protected $routeMiddleware = [
...
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,
];
完成以上操作接下來就行註冊路由,建立控制器,進行 API 功能驗證了。
一、建立路由
Route::get('register','AuthController@register'); //註冊
Route::get('login','AuthController@login'); //登入
Route::post('auth/login', 'AuthController@login');
Route::group(['middleware' => 'jwt.auth'], function(){
Route::get('auth/user', 'AuthController@user');
Route::post('auth/logout', 'AuthController@logout');
});
Route::group(['middleware' => 'jwt.refresh'], function(){
Route::get('auth/refresh', 'AuthController@refresh');
});
二、控制器程式碼
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller
{
//使用者註冊
public function register(Request $request){
$valid = Validator::make($request->all(), [
'name' => 'required|string|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|string|min:6|max:10',
]);
if ($valid->fails()) {
return array(
'code' => 1,
'message' => $valid->errors()->first(),
'data' => []
);
}
$user = new User();
$user->name = $request->name;
$user->email = $request->email;
$user->password = bcrypt($request->password);
$user->save(); //插入資料庫,建立使用者
return $user;
}
//使用者登入
public function login(Request $request){
$credentials = $request->only('email', 'password');
if(!$token = JWTAuth::attempt($credentials)){
return 'error'.$token;
}
// return Auth::user(); //此處可以獲取登入成功使用者的資訊,如賬號,郵箱等
return $token;
}
public function logout(){
JWTAuth::invalidate();
return '退出成功';
}
public function user()
{
$user = User::find(Auth::user()->id);
return response([
'status' => 'success',
'data' => $user
]);
}
public function refresh()
{
return response([
'status' => 'success'
]);
}
}
至此,只要訪問jwt.auth中介軟體內的路由,都需要登入,登陸之後會得到一個token,帶上token才能訪問。
PS:儲存使用者資訊的表為框架自帶的,只需要執行遷移命令php artisan migrate
你也可以根據專案需要重新建立使用者表。
學院君-原文連結:jwt-auth
本作品採用《CC 協議》,轉載必須註明作者和本文連結