Auth

Testing Is Documentation

tests/Auth/ManagerTest.phpAuth - 图1

QueryPHP 提供了一组简单的认证组件用于登陆验证,通常我们使用代理 \Leevel\Auth\Proxy\Auth 类进行静态调用。

内置支持的认证驱动类型包括 session、token,分别用于 web 和 api 的认证服务。

使用方式

使用容器 auths 服务

  1. \App::make('auths')->login(array $data, ?int $loginTime = null): void;

依赖注入

  1. class Demo
  2. {
  3. private \Leevel\Auth\Manager $auth;
  4. public function __construct(\Leevel\Auth\Manager $auth)
  5. {
  6. $this->auth = $auth;
  7. }
  8. }

使用静态代理

  1. \Leevel\Auth\Proxy\Auth::login(array $data, ?int $loginTime = null): void;

auth 配置

系统的 auth 配置位于应用下面的 option/auth.php 文件。

可以定义多个认证连接,并且支持切换,每一个连接支持驱动设置。

  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of the your app package.
  5. *
  6. * The PHP Application For Code Poem For You.
  7. * (c) 2018-2099 http://yourdomian.com All rights reserved.
  8. *
  9. * For the full copyright and license information, please view the LICENSE
  10. * file that was distributed with this source code.
  11. */
  12. return [
  13. /*
  14. * ---------------------------------------------------------------
  15. * 默认认证类型
  16. * ---------------------------------------------------------------
  17. *
  18. * 这里可以是 web 或者 api
  19. */
  20. 'default' => 'api',
  21. /*
  22. * ---------------------------------------------------------------
  23. * 默认 WEB 驱动
  24. * ---------------------------------------------------------------
  25. *
  26. * WEB 认证驱动连接
  27. */
  28. 'web_default' => 'session',
  29. /*
  30. * ---------------------------------------------------------------
  31. * 默认 API 驱动
  32. * ---------------------------------------------------------------
  33. *
  34. * API 认证驱动连接
  35. */
  36. 'api_default' => 'token',
  37. /*
  38. * ---------------------------------------------------------------
  39. * auth 连接参数
  40. * ---------------------------------------------------------------
  41. *
  42. * 这里为所有的 auth 的连接参数,每一种不同的驱动拥有不同的配置
  43. * 虽然有不同的驱动,但是在验证使用上却有着一致性
  44. */
  45. 'connect' => [
  46. 'session' => [
  47. // driver
  48. 'driver' => 'session',
  49. // token
  50. 'token' => 'token',
  51. ],
  52. 'token' => [
  53. // driver
  54. 'driver' => 'token',
  55. // token
  56. 'token' => null,
  57. // input token
  58. 'input_token' => 'token',
  59. ],
  60. ],
  61. ];

auth 参数根据不同的连接会有所区别,通用的 auth 参数如下:

配置项配置描述
web_defaultWEB 认证驱动连接
api_defaultAPI 认证驱动连接

Uses

  1. <?php
  2. use Leevel\Auth\Manager;
  3. use Leevel\Cache\File as CacheFile;
  4. use Leevel\Di\Container;
  5. use Leevel\Di\IContainer;
  6. use Leevel\Http\Request;
  7. use Leevel\Option\Option;
  8. use Leevel\Session\File as SessionFile;

认证基本使用

login 原型

  1. # Leevel\Auth\IAuth::login
  2. /**
  3. * 登录写入数据.
  4. */
  5. public function login(array $data, ?int $loginTime = null): void;

$loginTime 过期时间规则如下:

  • null 表示默认登陆缓存时间
  • 小与等于 0 表示永久缓存
  • 其它表示缓存多少时间,单位
  1. public function testBaseUse(): void
  2. {
  3. $manager = $this->createManager();
  4. $this->assertFalse($manager->isLogin());
  5. $this->assertSame([], $manager->getLogin());
  6. $this->assertNull($manager->login(['foo' => 'bar', 'hello' => 'world'], 10));
  7. $this->assertTrue($manager->isLogin());
  8. $this->assertSame(['foo' => 'bar', 'hello' => 'world'], $manager->getLogin());
  9. $this->assertNull($manager->logout());
  10. $this->assertFalse($manager->isLogin());
  11. $this->assertSame([], $manager->getLogin());
  12. }

setTokenName 设置认证名字

  1. public function testWithToken(): void
  2. {
  3. $manager = $this->createManagerWithToken();
  4. $manager->setTokenName('token');
  5. $this->assertFalse($manager->isLogin());
  6. $this->assertSame([], $manager->getLogin());
  7. $this->assertNull($manager->login(['foo' => 'bar', 'hello' => 'world'], 10));
  8. $this->assertTrue($manager->isLogin());
  9. $this->assertSame(['foo' => 'bar', 'hello' => 'world'], $manager->getLogin());
  10. $this->assertNull($manager->logout());
  11. $this->assertFalse($manager->isLogin());
  12. $this->assertSame([], $manager->getLogin());
  13. }

setDefaultConnect 设置默认驱动

  1. public function testSetDefaultDriver(): void
  2. {
  3. $manager = $this->createManagerWithTokenAndSession();
  4. $manager->setDefaultConnect('token');
  5. $manager->setTokenName('token');
  6. $this->assertFalse($manager->isLogin());
  7. $this->assertSame([], $manager->getLogin());
  8. $this->assertNull($manager->login(['foo' => 'bar', 'hello' => 'world'], 10));
  9. $this->assertTrue($manager->isLogin());
  10. $this->assertSame(['foo' => 'bar', 'hello' => 'world'], $manager->getLogin());
  11. $this->assertNull($manager->logout());
  12. $this->assertFalse($manager->isLogin());
  13. $this->assertSame([], $manager->getLogin());
  14. }