参考文章:[https://zhuanlan.zhihu.com/p/80352766](https://zhuanlan.zhihu.com/p/80352766)
1.composer 安装jwt
~~~text
composer require tymon/jwt-auth 1.0.0-rc.1
(composer require tymon/jwt-auth)
~~~
2.在config 文件夹的app.php 中注册服务提供者
~~~php
'providers' => [
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
'aliases' => [
'JWTAuth'=> Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory'=> Tymon\JWTAuth\Facades\JWTFactory::class,
]
~~~
3.生成配置文件
~~~text
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
~~~
**4.生成jwt 密钥**
~~~text
php artisan jwt:secret
~~~
5.在auth.php 文件中 配置 auth guard 让api的driver使用jwt
```
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',//更改此处为jwt
'provider' => 'users',
],
],
```
6.更改 User model使其支持 jwt-auth
```
<?php
namespace App;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
protected $table = 'users';
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
```
7.配置 中间件
在 Middleware 文件夹下新建 ApiAuth.php 中间件文件
~~~text
<?php
namespace App\Http\Middleware;
use Closure;
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;
class ApiAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
try {
if (! $user = JWTAuth::parseToken()->authenticate()) { //获取到用户数据,并赋值给$user
return response()->json([
'errcode' => 1004,
'errmsg' => '无此用户'
], 404);
}
return $next($request);
} catch (TokenExpiredException $e) {
return response()->json([
'errcode' => 1003,
'errmsg' => 'token 过期' , //token已过期
]);
} catch (TokenInvalidException $e) {
return response()->json([
'errcode' => 1002,
'errmsg' => 'token 无效', //token无效
]);
} catch (JWTException $e) {
return response()->json([
'errcode' => 1001,
'errmsg' => '缺少token' , //token为空
]);
}
}
}
~~~
注册中间件 在 Kernel.php 中注册中间件 并设置别名
~~~text
protected $routeMiddleware = [
'api.auth' => \App\Http\Middleware\ApiAuth::class,
];
~~~
到此你的jwt就算安装配置完成了
\*\*基本使用\*\*
1.新建AuthCtorller.php 控制器
~~~text
php artisan make:controller AuthController
~~~
2.编辑 测试控制器
~~~text
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
/**
* jwt 测试
*/
//登录
public function login(Request $request){
$username = $request->get('username');
$password = $request->get('password');
$user_mes = User::where('username','=',$username)->first();
if (!$user_mes || !Hash::check($password, $user_mes->password)) {
return "账号或密码错误";
}
$token=JWTAuth::fromUser($user_mes);//生成token
if (!$token) {
return "登录失败,请重试";
}
return response()->json(['token'=>$token]);
}
//获取用户信息
public function home(){
$user=JWTAuth::parseToken()->touser();//获取用户信息
return $user;
}
//退出
public function logout(){
JWTAuth::parseToken()->invalidate();//退出
return '退出成功';
}
}
~~~
3.编辑路由
~~~text
<?php
Route::post('/login','AuthController@login');//登录
Route::group(['middleware' => 'api.auth'], function () {
Route::post('/home','AuthController@home');//获取用户信息
Route::post('/logout','AuthController@logout');//退出
});
~~~
4.开始测试
测试登录 /api/login 这里就成功的拿到了token
![](https://img.kancloud.cn/1c/9c/1c9c4d975872a7356fc9316fcf34e649_582x523.png)
获取用户信息 /api/home
![](https://img.kancloud.cn/5d/e6/5de63546aa7b4c885f17f38c1a06ec28_1920x937.png)
退出 /api/logout
![](https://img.kancloud.cn/83/d8/83d88093e55072d0ff60a246b192b0ab_1920x937.png)
- 重要文档
- 工作须知
- 项目下的公共方法
- 程序员给代码写注释时有哪些讲究!
- RestFul 讲解
- 其他知识
- docker容器
- MongoDB的使用
- Node.js的使用
- Session共享
- Wordpress的使用
- Websocket的简介
- Ajax
- 项目技术
- Https配置证书
- Nginx的反向代理
- MySQL读写分离配置(laravel篇)
- Nginx的负载均衡
- App接口返回格式
- laravel中JWT的应用
- laravel验证码的使用
- laravel公共方法文件
- laravel框架的RBAC
- Git相关
- Git篇1
- Git篇2
- Mysql相关
- Mysql的主从复制
- MySQL的备份
- MySQL的使用
- 请求第三方接口
- Redis相关
- redis的使用
- Redis的基本用法以及场景分析
- 开发小技巧
- Linux
- 禁用root及密码登录
- Lnmp环境的安装
- 安装composer
- 安装Redis
- 文件共享服务 samba
- 其他安装
- Lnmp常用命令
- 性能检测命令
- Nginx的配置详解
- PHP相关
- PHP基础知识
- php常见的系统函数
- PHP的设计模式
- Cookie 和 Session 的封装
- Mysql知识
- Mysql索引
- MySQL的数据类型
- PHP重要知识
- PHP框架篇
- Laravel框架
- laravel---Excel
- laravel文件上传
- Laravel-Mysql常用操作
- Laravel队列(queue)
- laravel-发送Email
- laravel--JWT
- TP框架篇
- tp5主从数据库设置读写分离
- 前端
- JS
- js代码实现点击按钮出现60秒倒计时
- 开发软件相关
- 代码编辑器
- vs code配置ftp连接远程服务器实现代码文自动上传
- 编程相关软件下载