命令行执行
composer require tymon/jwt-auth 1.*@rc
config/app.php 新增如下
'providers' => [
...
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
config/auth.php 新增如下
'guards' => [
....
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'auth_admin' => [
'driver' => 'jwt',
'provider' => 'auth_admins'
]
],
'providers' => [
....
'auth_admins' => [
'driver' => 'eloquent',
'model' => Modules\Admin\Models\AuthAdmin::class,
]
],
发布程序包配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
会在本地生成这个文件
生成加密密钥
php artisan jwt:secret
会在.env生成一条记录
刚才配置的AuthAdmin 文件
<?php
/**
* @description 管理员模型
* @Date 2021-12-24 0024 11:41
*/
namespace Modules\Admin\Modules;
use Illuminate\Notifications\Notifiable;
use Modules\Common\Models\BaseModel;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class AuthAdmin extends Authenticatable implements JWTSubject
{
use Notifiable;
//配置 保持一直
protected $guard = 'auth_admin';
//隐藏不需要输出
protected $hidden = [
'password'
];
//默认写法 env的key
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* @description 自定义声明。给空即可
* @Date 2021-12-24 0024 11:52
*/
public function getJWTCustomClaims()
{
return [];
}
}
新建LoginService
<?php
/**
* @description 管理员登录
* @Date 2021-12-24 0024 11:57
*/
namespace Modules\Admin\Services\auth;
use Modules\Admin\Http\Requests\LoginRequest;
use Modules\Admin\Services\BaseApiService;
class LoginService extends BaseApiService
{
/**
* @description 管理员登录
* @Date 2021-12-24 0024 11:59
*/
public function login(array $data)
{
if (true == \Auth::guard('auth_admin')->attempt($data)) {
return $this->apiSuccess("登录成功");
}
$this->apiError("用户名或密码错误");
}
}
校验登录
<?php
/**
* @description
* @Date 2021-12-24 0024 11:30
*/
namespace Modules\Admin\Http\Controllers\v1;
use Modules\Admin\Http\Requests\LoginRequest;
use Modules\Admin\Services\auth\LoginService;
class LoginController extends BaseApiController
{
public function login(LoginRequest $request)
{
return (new LoginService())->login($request->only(['username', 'password']));
}
}