## `Auth` 组件  本组件用于 API 中的授权与会话,基于 JWT,使用 BearerToken 的方式传递。 | 类 | 调用 | | --- | --- | --- | Mix\Auth\Authorization | app()->auth | ## 依赖注入配置 [>> 到 GitHub 查看默认配置 <<](https://github.com/mix-php/mix/blob/master/applications/http/config/main_coroutine.php#L233) JWT 支持的全部算法: - Mix\Auth\JWT::ALGORITHM_HS256 - Mix\Auth\JWT::ALGORITHM_HS384 - Mix\Auth\JWT::ALGORITHM_HS512 - Mix\Auth\JWT::ALGORITHM_RS256 - Mix\Auth\JWT::ALGORITHM_RS384 - Mix\Auth\JWT::ALGORITHM_RS512 HS 算法配置: ``` // jwt [ // 类路径 'class' => Mix\Auth\JWT::class, // 属性 'properties' => [ // 钥匙 'key' => 'example_key', // 签名算法 'algorithm' => Mix\Auth\JWT::ALGORITHM_RS256, ], ], ``` RS 算法配置: ``` // jwt [ // 类路径 'class' => Mix\Auth\JWT::class, // 属性 'properties' => [ // 私钥 'privateKey' => '', // 公钥 'publicKey' => '', // 签名算法 'algorithm' => Mix\Auth\JWT::ALGORITHM_HS256, ], ], ``` ## 使用范例 获取 access_token 的接口: ``` // 授权方法 public function actionAuth() { /* 验证账号密码成功后 */ // 创建Token $payload = [ "iss" => "http://example.org", // 签发人 'iat' => time(), // 签发时间 'exp' => time() + 7200, // 过期时间 'uid' => 1088, ]; $accessToken = app()->auth->createToken($payload); // 响应 $data = [ 'status' => 0, 'data' => [ 'access_token' => $accessToken, 'expire_in' => 7200, ], ]; return $data; } ``` 效验Token:在前置中间件中校验。 ~~~ // 前置中间件的 handle 方法 public function handle($callable, \Closure $next) { // 添加中间件执行代码 $payload = []; try{ $payload = app()->auth->getPayload(); }catch (\Throwable $e){ // token解码失败 } if (empty($payload)) { // 返回错误码 $data = [ 'status' => 30001, ]; return $data; } // 执行下一个中间件 return $next(); } ~~~ >[danger] 每调用一次 getPayload 就会解码一次,所以解码后的用户信息需要保存起来,不要在获取用户信息时每次都去解码 BearerToken 传值范例: ![](https://i.loli.net/2019/06/10/5cfdfde331f4921098.png)