25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.2KB

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controllers;
  4. use Core\Controller;
  5. use Core\Request;
  6. use Core\Response;
  7. class AuthController extends Controller
  8. {
  9. public function login(): Response
  10. {
  11. if (auth()->check()) {
  12. return $this->redirect('/');
  13. }
  14. return $this->redirect(auth()->beginLogin());
  15. }
  16. public function callback(): Response
  17. {
  18. $request = Request::capture();
  19. $error = (string) $request->input('error', '');
  20. if ($error !== '') {
  21. $desc = (string) $request->input('error_description', $error);
  22. return new Response('Authentication error: ' . e($desc), 400);
  23. }
  24. $code = (string) $request->input('code', '');
  25. $state = (string) $request->input('state', '');
  26. if ($code === '' || $state === '') {
  27. return $this->redirect('/login');
  28. }
  29. try {
  30. auth()->handleCallback($code, $state);
  31. } catch (\Throwable $e) {
  32. return new Response('Login failed: ' . e($e->getMessage()), 400);
  33. }
  34. return $this->redirect('/');
  35. }
  36. public function logout(): Response
  37. {
  38. return $this->redirect(auth()->logout());
  39. }
  40. }

Powered by TurnKey Linux.