You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 satır
2.9KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Auth;
  3. use App\Codes\EnvironmentName;
  4. use App\Http\Controllers\Web\WebController;
  5. use App\Kintone\Models\Customer;
  6. use App\Models\User;
  7. use Exception;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Auth;
  11. use League\CommonMark\Environment\Environment;
  12. class LoginController extends WebController
  13. {
  14. public function name(): string
  15. {
  16. return "ログイン";
  17. }
  18. public function description(): string
  19. {
  20. return "ログインを行う";
  21. }
  22. public function __construct(protected LoginParam $param)
  23. {
  24. parent::__construct();
  25. }
  26. protected function run(Request $request): JsonResponse
  27. {
  28. // 取得したユーザ情報を登録しログインを行う
  29. $param = $this->param;
  30. $access = Customer::getAccess();
  31. $query = Customer::getQuery()->where(Customer::FIELD_EMAIL, $param->email);
  32. $customer = $access->some($query);
  33. if ($customer->count() !== 1) {
  34. return $this->failedResponse();
  35. }
  36. $customer = $customer->first();
  37. $kintoneId = $customer->getRecordId();
  38. $user = User::whereKintoneId($kintoneId)
  39. ->first();
  40. if ($user instanceof User) {
  41. // すでにユーザー登録されているケース
  42. //データ同期
  43. if ($user->email !== $param->email) {
  44. $user->email = $param->email;
  45. $user->save();
  46. }
  47. if ($user->kintone_customer_code !== $customer->getNumber(Customer::FIELD_CUSTOMER_CODE)) {
  48. $user->kintone_customer_code = $customer->getNumber(Customer::FIELD_CUSTOMER_CODE);
  49. $user->save();
  50. }
  51. if (Auth::attempt([
  52. 'email' => $param->email,
  53. 'password' => $param->password,
  54. ])) {
  55. return $this->successResponse($customer->toArray());
  56. } else {
  57. return $this->failedResponse();
  58. }
  59. } else if (app()->environment([EnvironmentName::LOCAL->value]) && $param->password === "testuser") {
  60. // ローカル環境でのテストユーザー作成処理
  61. $user = new User();
  62. $user->email = $param->email;
  63. $user->kintone_id = $customer->getRecordId();
  64. $user->password = "testuser";
  65. $user->kintone_customer_code = $customer->getNumber(Customer::FIELD_CUSTOMER_CODE);
  66. $user->save();
  67. if (Auth::attempt([
  68. 'email' => $param->email,
  69. 'password' => 'testuser',
  70. ])) {
  71. return $this->successResponse($customer->toArray());
  72. } else {
  73. return $this->failedResponse();
  74. }
  75. } else {
  76. return $this->failedResponse();
  77. }
  78. }
  79. }