laravel JWT扩展

1.安装
composer.json中直接添加
"require": {
"tymon/jwt-auth": "0.5.*"
},
然后执行composer update,完成后在vendor目录下会出现tymon文件夹
2.配置
config/app.php中providers添加以下内容:
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class
config/app.php中aliases添加以下内容:
'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth',
'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory',

app\Http\Kernel.php中$routeMiddleware添加以下内容:

'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken',
'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken',

在项目目录 下执行以下命令:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
php artisan jwt:generate
执行php artisan jwt:generate命令时会报找不到handle()方法找不到,找到vendor\tymon\jwt-auth\src\Commands\JWTGenerateCommand.php文件中添加以下方法:
public function handle()
{
$this->fire();
}
然后再执行以上命令
3.应用

1.添加路由
api.php路由下添加以下内容:
Route::post('register', 'ApiController@register'); // 注册
Route::post('login', 'ApiController@login'); // 登陆
Route::group(['middleware' => 'jwt.auth'], function () {
Route::post('get_user_details', 'ApiController@get_user_details'); // 获取用户详情
});

Route::post('auth/refresh-token', ['middleware' => 'jwt.refresh', function(Request $request) { //刷新token
//这里根据自身情况而定,本身是不会输入结果的,其生成的token会在返回的header中返回
$authorization = $request->headers->get('authorization');
return response()->json(compact('authorization'));
}]);

 

控制器文件:app\Http\Controllers\ApiController.php

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;

class ApiController extends Controller
{
    /*注册*/
    public function register(Request $request)
    {
        $input = $request->all();
        if(!isset($input['password'])){
            return response()->json(['error' => 'password not given'], 500);
        }
        try{
            $input['password'] = Hash::make($input['password']);
            User::create($input);
            return response()->json(['result'=>true]);
        }catch (Exception $e) {
             return response()->json(['error' => 'could_not_create_token'], 500);
        }
    }

    /*登陆*/
    public function login(Request $request)
    {
        $input = $request->all();
        if (!$token = JWTAuth::attempt($input)) {
            return response()->json(['result' => '邮箱或密码错误.']);
        }
        return response()->json(['result' => $token]);
    }

    /*获取用户信息*/
    public function get_user_details(Request $request)
    {

        $user = JWTAuth::parseToken()->authenticate();
        return response()->json(['result' => $user]);
    }

}

应用:
登录地址:
http://blog.app/api/login
传参数email和password,请求及返回结果如下:


根据token获取用户:
http://blog.app/api/get_user_details
传参数email和password,请求及返回结果如下:
刷新token请求地址:
http://blog.app/api/auth/refresh-token
请求及返回结果如下:

以上请求注意,请求参数是以头信息传递的

返回头信息如下图: