这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战
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
版本高的话可以降低版本:
使用命令:
当前切换后切记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模型
认证一般基于用户,所以我们修改用户模型: 还要增加两个方法:
/**
* 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 [];
}
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) {
// dd(bcrypt('12345'));
$credentials = request(['email', 'password']);
if (!$token = auth('api')->attempt($credentials)) {
return $this->response->errorUnauthorized();
}
return $this->respondWithToken($token);
}
/**
* Get the token array structure.
*
* @param string $token
*
* @return \Illuminate\Http\JsonResponse
*/
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() {
// $users = User::all();
// return $this->response->collection($users, new UserTransformer);
// 从token获取用户信息
$user = app('Dingo\Api\Auth\Auth')->user();
return $user;
}
还可以使用:
$user = auth('api')->user();
return $user;
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!