blob / laravel-jwt-auth
一个简单的Laravel接口,用于通过JWT进行认证。
Requires
- php: >=5.5.9
- lcobucci/jwt: ~3.2.0
- nesbot/carbon: ~1.21
This package is not auto-updated.
Last update: 2024-09-20 23:28:55 UTC
README
注意: 此包不再处于活跃开发状态。请随意分叉并按需扩展。
一个简单的Laravel接口,用于与JWT认证API交互。
安装
要安装此包,只需将以下内容添加到Laravel安装的composer.json
文件中
"require": { "laravel/framework": "5.*", "blob/laravel-jwt-auth": "dev-master" },
运行composer update
以获取文件。
然后,将以下服务提供者添加到你的config/app.php
文件中的providers
数组中
'providers' => [ ... JWTAuth\Providers\JWTAuthServiceProvider::class, JWTAuth\Providers\JWTEventServiceProvider::class, ];
然后,将以下门面添加到你的config/app.php
文件中的aliases
数组中
'aliases' => [ ... 'JWTAuth' => JWTAuth\Facades\JWTAuth::class, ];
然后,将以下中间件添加到你的app/Http/Kernel.php
文件中的routeMiddleware
数组中
protected $routeMiddleware = [ ... 'jwt.auth' => \JWTAuth\Http\Middleware\JWTAuth::class, 'jwt.auth.acl' => \JWTAuth\Http\Middleware\JWTAuthAcl::class, ];
从命令行运行:php artisan vendor:publish --provider="JWTAuth\Providers\JWTAuthServiceProvider"
配置
打开config/jwt.php
并配置API端点和凭证
return [ 'username' => 'email', 'secret' => 'secret_change_me',//32 length 'token_header' => 'Authorization', //post, get, ... 'token_name' => 'token', //ex: example.com 'iss' => 'iss_change_me', //ex: my_app_name 'aud' => 'aud_change_me', //token expiration 'expiration' => 3600,//sec 'store' => 'file', //count of attempt fails by credentials 'attempts' => 5, //block user on *min, if count of attempts not remain 'attempts_exp' => 60, //min ];
使用
通过凭证进行认证
try { $credentials = $request->only(['email', 'password']); if (!JWTAuth::attempt($credentials)) { return response()->json(['reason' => 'user_not_found', 'message' => 'User with provided credentials not found.'], 404); } } catch (AttemptException $e) { return response()->json(['reason' => 'attempt_locked', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (TokenUnavailableException $e) { return response()->json(['reason' => 'token_unavailable', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (TokenExpiredException $e) { return response()->json(['reason' => 'token_expired', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (TokenInvalidException $e) { return response()->json(['reason' => 'token_invalid', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (JWTException $e) { return response()->json(['reason' => 'token_not_provided', 'message' => $e->getMessage()], $e->getStatusCode()); }
通过令牌进行认证
try { JWTAuth::validateToken(JWTAuth::getToken()); if (!JWTAuth::attempt()) { return response()->json(['reason' => 'user_not_found', 'message' => 'User with provided credentials not found.'], 404); } } catch (AttemptException $e) { return response()->json(['reason' => 'attempt_locked', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (TokenUnavailableException $e) { return response()->json(['reason' => 'token_unavailable', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (TokenExpiredException $e) { return response()->json(['reason' => 'token_expired', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (TokenInvalidException $e) { return response()->json(['reason' => 'token_invalid', 'message' => $e->getMessage()], $e->getStatusCode()); } catch (JWTException $e) { return response()->json(['reason' => 'token_not_provided', 'message' => $e->getMessage()], $e->getStatusCode()); }
调用attempt()
方法后,将返回\App\User
对象。
$user = JWTAuth::user();
创建并获取新令牌。其中$user
是\App\User
的实例。
$tokenObject = JWTAuth::createToken($user);
从string
获取令牌对象。
$tokenObject = JWTAuth::parseToken($token);
方法getToken()
将在头或请求数据中搜索令牌。
以字符串形式获取令牌
$tokenString = (string)JWTAuth::getToken();
以对象形式获取令牌 (\Lcobucci\JWT\Token
)
$tokenObject = JWTAuth::getToken();
标记令牌为不可用。其中$token
是\Lcobucci\JWT\Token
的实例。
JWTAuth::forgetToken($token);
验证令牌。其中$token
是\Lcobucci\JWT\Token
的实例。
try { JWTAuth::validateToken($token) } catch( /** * @throws \JWTAuth\Exceptions\TokenExpiredException * @throws \JWTAuth\Exceptions\TokenInvalidException * @throws \JWTAuth\Exceptions\TokenUnavailableException */ ) { }
设置username
字段名,而不是配置默认的email
JWTAuth::setUsername('login');
获取当前username
字段名
$username = JWTAuth::username();
通过凭证获取用户(\App\User
)
$user = JWTAuth::retrieveByCredentials($credentials);
通过令牌(\Lcobucci\JWT\Token
)获取用户(\App\User
)
$user = JWTAuth::retrieveByJWT($token);
登录用户。其中$user
是\App\User
的实例。
login($user);