Dingo/Api认证文档
JWT介绍文档
一、tymon/jwt-auth api认证
1.1 安装tymon/jwt-auth
tymon/jwt-auth安装介绍文档
1、安装tymon/jwt-auth
composer require tymon/jwt-auth 
1-1 安装报错可看,不报错可越过。
如果安装过程中报错,建议先使用php7.x 因为现在高版本还不适配,如果你的homestead 的php 版本高的话可以降低版本: 使用命令:
sudo update-alternatives --config php 执行后,会列出当前 php 所有版本和编号,输入编号,切换到执行的版本。 
当前切换后切记homestead 的环境php也要对应php 版本,修改Homestead.yaml :  修改完后记得sudo vagrant reload --provision 重启下虚拟机。
2、发布配置文件,生成 JWT_SECRET
1、发布配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" 
2、生成 JWT_SECRET php artisan jwt:secret  
3、更新User模型
认证一般基于用户,所以我们修改用户模型:  还要增加两个方法:
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}

4、配置 Auth guard

二、dingo/api配置
在 config/api.php 文件:
'auth' => [
'jwt' => 'Dingo\Api\Auth\Provider\JWT',
],

三、认证例子
3.1 失败例子
1、认证路由
在routes/api 下增加需要登录的路由:
$api->group(['middleware' => 'api.auth'], function($api) {
$api->get('users', [\App\Http\Controllers\TestController::class, 'users']);
});

2、认证路由方法
public function users() {
$users = User::all();
return $this->response->collection($users, new UserTransformer);
}
效果:  可以看到需要认证了。
3.2 成功例子
1、登陆路由
$api->post('login', [\App\Http\Controllers\TestController::class, 'login']);

2、登陆路由方法
我们先用dd(bcrypt('12345') 获取到加密的密文:  找到数据库中数据,密码替换:  然后登陆路由方法
public function login(Request $request) {
$credentials = request(['email', 'password']);
if (!$token = auth('api')->attempt($credentials)) {
return $this->response->errorUnauthorized();
}
return $this->respondWithToken($token);
}
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'Bearer',
'expires_in' => auth('api')->factory()->getTTL() * 60
]);
}
 在postman 中测试:   可以看到给我们成功返回token 了,复制token ,请求users 带入:  可以看到也成功的请求回来需要认证的接口了。
四、根据token获取用户信息
public function users() {
$user = app('Dingo\Api\Auth\Auth')->user();
return $user;
}
  还可以使用:
$user = auth('api')->user();
return $user;
 
在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持
|