Laravel jwt 驗證

vio_xiaohei發表於2019-05-21

本章主要介紹前後端徹底分離時,如何使用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

相關文章