Laravel jwt 验证

本章主要介绍前后端彻底分离时,如何使用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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!