laravel版本为5.5

1、使用 composer 安装

composer require tymon/jwt-auth 1.*@rc

  

2、发布配置文件

# 这条命令会在 config 下增加一个 jwt.php 的配置文件

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

  

3、生成加密密钥

# 这条命令会在 .env 文件下生成一个加密密钥,如:JWT_SECRET=foobar
php artisan jwt:secret

  

4、更新你的模型(此处 使用的是laravel的user模型)

 1 <?php
 2 
 3 namespace App\Models;
 4 
 5 use Tymon\JWTAuth\Contracts\JWTSubject;
 6 use Illuminate\Notifications\Notifiable;
 7 use Illuminate\Foundation\Auth\User as Authenticatable;
 8 
 9 class User extends Authenticatable implements JWTSubject
10 {
11     use Notifiable;
12 
13     protected $connection = 'business';
14     protected $table = 'jupin_erp_business.t_user';
15 
16     /**
17      * Get the identifier that will be stored in the subject claim of the JWT.
18      *
19      * @return mixed
20      */
21     public function getJWTIdentifier()
22     {
23         return $this->getKey();
24     }
25 
26     /**
27      * Return a key value array, containing any custom claims to be added to the JWT.
28      *
29      * @return array
30      */
31     public function getJWTCustomClaims()
32     {
33         return [];
34     }
35 
36 }

 

5、修改 auth.php

config/auth.php
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt',      // 原来是 token 改成jwt
        'provider' => 'users',
    ],
],

  

6、注册一些路由

修改 route/api.php

Route::group(['middleware' => 'api','prefix' => 'auth'], function ($router) {

    Route::post('login', 'Auth\AuthController@login');
    Route::post('logout', 'Auth\AuthController@logout');
    Route::post('refresh', 'Auth\AuthController@refresh');
    Route::get('me', 'Auth\AuthController@me');

});

  

7、添加控制器

php artisan make:controller Auth/AuthController

  

8、添加控制器内容

文档内容

 1 <?php
 2 
 3 namespace App\Http\Controllers;
 4 
 5 use Illuminate\Support\Facades\Auth;
 6 use App\Http\Controllers\Controller;
 7 
 8 class AuthController extends Controller
 9 {
10     /**
11      * Create a new AuthController instance.
12      * 要求附带email和password(数据来源users表)
13      * 
14      * @return void
15      */
16     public function __construct()
17     {
18         // 这里额外注意了:官方文档样例中只除外了『login』
19         // 这样的结果是,token 只能在有效期以内进行刷新,过期无法刷新
20         // 如果把 refresh 也放进去,token 即使过期但仍在刷新期以内也可刷新
21         // 不过刷新一次作废
22         $this->middleware('auth:api', ['except' => ['login']]);
23         // 另外关于上面的中间件,官方文档写的是『auth:api』
24         // 但是我推荐用 『jwt.auth』,效果是一样的,但是有更加丰富的报错信息返回
25     }
26 
27     /**
28      * Get a JWT via given credentials.
29      *
30      * @return \Illuminate\Http\JsonResponse
31      */
32     public function login()
33     {
34         $credentials = request(['email', 'password']);
35 
36         if (! $token = auth('api')->attempt($credentials)) {
37             return response()->json(['error' => 'Unauthorized'], 401);
38         }
39 
40         return $this->respondWithToken($token);
41     }
42 
43     /**
44      * Get the authenticated User.
45      *
46      * @return \Illuminate\Http\JsonResponse
47      */
48     public function me()
49     {
50         return response()->json(auth('api')->user());
51     }
52 
53     /**
54      * Log the user out (Invalidate the token).
55      *
56      * @return \Illuminate\Http\JsonResponse
57      */
58     public function logout()
59     {
60         auth('api')->logout();
61 
62         return response()->json(['message' => 'Successfully logged out']);
63     }
64 
65     /**
66      * Refresh a token.
67      * 刷新token,如果开启黑名单,以前的token便会失效。
68      * 值得注意的是用上面的getToken再获取一次Token并不算做刷新,两次获得的Token是并行的,即两个都可用。
69      * @return \Illuminate\Http\JsonResponse
70      */
71     public function refresh()
72     {
73         return $this->respondWithToken(auth('api')->refresh());
74     }
75 
76     /**
77      * Get the token array structure.
78      *
79      * @param  string $token
80      *
81      * @return \Illuminate\Http\JsonResponse
82      */
83     protected function respondWithToken($token)
84     {
85         return response()->json([
86             'access_token' => $token,
87             'token_type' => 'bearer',
88             'expires_in' => auth('api')->factory()->getTTL() * 60
89         ]);
90     }
91 }
View Code

相关文章: