1.配置password
安装插件
composer require laravel/passport
2.执行迁移文件 生成数据表 正常有五张数据表
php artisan migrate
3.生成授权码 注:secret保存起来
php artisan passport:install
4.修改接口账号模型
<?php
namespace App\Models;
use App\Observers\UserObserver;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
//api验证方法 passpord认证引入这个
use Laravel\Passport\HasApiTokens;
//注意passpord 需要与auth登录 配合使用 所以也要使用auth
use Illuminate\Foundation\Auth\User as AuthUser;
class UserPort extends AuthUser
{
use HasFactory,HasApiTokens;
protected $table = 'user_port';
protected $guarded = [];
//观察类与passpord认证无关
protected static function boot()
{
parent::boot(); // TODO: Change the autogenerated stub
//注册观察类
self::observe(UserObserver::class);
}
}
?5.修改config/auth.php文件中的api配置
注意!!! driver 必须改为passpord 默认为session
//guards 内部
'api' => [
'driver' => 'passport',
'provider' => 'UserPort',
],
6.令牌有效期
?在app/Proivders/AuthServiceProvide.php文件中的boot方法添加有效期
public function boot()
{
$this->registerPolicies();
//设置token认证有效期为2小时
Passport::tokensExpireIn(now()->addHour(2));
//刷新token有效期为30天
Passport::refreshTokensExpireIn(now()->addDay(30));
//设置令牌过期时间(不写默认为一年)
Passport::personalAccessTokensExpireIn(now()->addSecond(500000));
}
7.解决auth在接口中登录没有attempt问题
前面
//这里为解决方法
'apiweb' => [
'driver' => 'session',
'provider' => 'UserPort',
],
//这里为前面添加进来的
'api' => [
'driver' => 'passport',
'provider' => 'UserPort',
],
8.最后执行登陆 登录成功生成token
//测试生成token
public function login(Request $request)
{
// 自己生成的客户端授权码
// JvLOWJsZ4Zovz2uAgQbCexix98oPaM7lPFEADzjT
// 0idPMCbVo4htxBOXYXZHldbVLH8Qx7Tbma6EFqXN
//auth登录
$boolResult = auth()->guard('apiweb')->attempt($request->all());
if ($boolResult)
{
//用户模型对象
$userModel = auth()->guard('apiweb')->user();
//从模型中拿出当前用户的点击次数 就是数据库字段
if($userModel->click > env('APINUM'))
{
return response()->json(['status'=>1002,'msg'=>'当天请求次数超过限制'],500);
}
//生成token
$token = $userModel->createToken('api')->accessToken;
//让当前用户数据库登陆次数加一
$userModel->increment('click');
$data = [
'expire'=>7200,
'token'=>$token
];
return response()->json($data);
}
return response()->json(['ststus'=>1001,'msg'=>'登陆失败'],401);
}
9.jwt中间件认证 成功返回token 存入缓存
//这里的中间件前面的过程已经自己创建好了 直接调用就好 下面的路由不用在意
Route::group(['middleware'=>'auth:api'],function (){
//登录认证是否有中间件
Route::post('loignDo',[\App\Http\Controllers\ApiController::class,'loginDo'])->name('loignDo');
//用户授权信息入库
Route::post('userAuth',[\App\Http\Controllers\ApiController::class,'userAuth'])->name('userAuth');
//获取用户基本信息
Route::post('userData',[\App\Http\Controllers\ApiController::class,'userData'])->name('userData');
//文件上传小牛(七牛云)
Route::post('file',[\App\Http\Controllers\ApiController::class,'upfile'])->name('upfile');
//用户个人信息修改
Route::post('idcardup',[\App\Http\Controllers\ApiController::class,'idcardup'])->name('idcardup');
//用户身份证上传
Route::post('cardimg',[\App\Http\Controllers\ApiController::class,'cardimg'])->name('cardimg');
//用户认证信息添加
Route::post('idcard',[\App\Http\Controllers\ApiController::class,'idcard'])->name('idcard');
//看房通知接口
Route::post('notices',[\App\Http\Controllers\ApiController::class,'notices'])->name('notices');
});
10.如果登录报错 提醒你 不支持 post 或者get 路由的时候就是 token传递有问题 好好看看自己的单词是否正确
小程序 路由传递方式?
//wx.request里 头部
header:{Authorization:'Bearer?'+token},
|