laravel-jwt签发token
在上一篇,我们学习了如何让你的laravel
跑起了,到了这一篇,我们来学习一下如何让你的项目拥有登录功能
我们本次登录使用的鉴权方式是Token
什么是Token
token 通过一次登录验证,得到一个鉴权字符串,然后以后带着这个鉴权字符串进行后续操作,这样就可以解决每次请求都要带账号密码的问题,而且也不需要反复使用账号和密码。
本次我们学习登录,使用的是JSON Web Token 简称jwt
!
什么是jwt
?
JWT 全称 JSON Web Tokens ,是一种规范化的 token。可以理解为对 token 这一技术提出一套规范
首先我们进入项目目录下面执行composer
命令(composer
安装方法点击查看):composer require tymon/jwt-auth
到此便是jwt
安装成功
我们继续键入命令php artisan vendor:publish –provider=”Tymon\JWTAuth\Providers\LaravelServiceProvider”
这条命令会在我们项目的config文件中新建jwt.confg 文件
在我们配置发布成功后需要继续执行下一条命令:php artisan jwt:secret
来生成密匙
我们需要在用户模型里面使用implements
实现对应的接口类
继续实现接口类中的方法,因为interface
类的特性,我们在子类中必须实现它的方法
我们打开配置文件:config/auth.php
进行处理:
1.我们把guards的key改为api,默认验签为api
2.然后driver改为jwt
3.provider可以自己取名,我这里取名users因为是user表为用户表,方便维护
4.文件往下的providers中定义我们刚刚guards中命名的provider的字段
5.在providers中的driver中本次取用的是模型eloquent验证,这个根据自身需要
6.model为我们用户的模型命名空间
以上具体为下图
示例:
登录方法
return [
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users'
]
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
],
];
最后我们新建一个AuthController控制器并创建login方法:
模拟用户数据
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
class AuthController extends Controller
{
public function login(): JsonResponse
{
$credentials = request(['email', 'password']);
if (! $token = auth()->guard('api')->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60
]);
}
}
完成后我们需要在数据库写入一条用户数据:
在命令行中执行一条:php artisan make:seeder UserSeeder
可以在database/seeders
目录下得到一个迁移文件
直接在里面塞入数据:
php
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$data = [
'name' => '无所谓',
'email' => '12345@php.cn',
'email_verified_at' => now(),
'password' => bcrypt('123456'), // password
'remember_token' => Str::random(10),
];
User::query()->create($data);
}
}
然后继续执行:php artisan db:seed --class=UserSeeder
我们就得到了一条用户数据
最后我们用工具进行模拟请求就可以直接拿到本次登录的Token了: