SessionController.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace App\Http\Controllers\V3;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\V3\StoreSessionRequest;
  5. use App\Http\Resources\V3\SessionResource;
  6. use App\Services\V3\SessionService;
  7. /**
  8. * 登录。
  9. *
  10. * 取代 `POST /v2/sign-in`(`AuthController@signIn`)+ 紧随其后的
  11. * `GET /v2/auth/current`。v2 那两条在 dashboard-v4 下线前原样保留,不要改动;
  12. * wikipali-mobile 目前也还在用它们。
  13. */
  14. class SessionController extends Controller
  15. {
  16. public function __construct(private readonly SessionService $sessions) {}
  17. /**
  18. * 登录
  19. *
  20. * 用用户名或邮箱 + 密码换取 bearer token,同时返回当前用户资料,前端不必再查一次。
  21. * 账号或密码不对返回 422(errors.login),不区分是哪一个错。
  22. * 按 IP 与账号限流,超出返回 429。
  23. *
  24. * @unauthenticated
  25. *
  26. * @bodyParam login string required 用户名或邮箱(邮箱不区分大小写)
  27. * @bodyParam password string required 密码
  28. *
  29. * @responseStatus 201 登录成功
  30. * @responseStatus 429 尝试过于频繁
  31. */
  32. public function store(StoreSessionRequest $request)
  33. {
  34. return SessionResource::make(
  35. $this->sessions->signIn($request->validated('login'), $request->validated('password'))
  36. )->response()->setStatusCode(201);
  37. }
  38. }