From 992390fa7821485370ec5f99f8073744d4b4fdae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=86=E3=82=AF=E3=83=8B=E3=82=AB=E3=83=AB=E8=AB=8F?= =?UTF-8?q?=E8=A8=AA=E5=AD=90?= Date: Fri, 29 Oct 2021 10:36:05 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=91=E3=82=B9=E3=83=AF=E3=83=BC=E3=83=89?= =?UTF-8?q?=E5=86=8D=E7=99=BA=E8=A1=8C=E4=BE=9D=E9=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ChildrenController.php | 52 ++++++++++++++++++- .../Controllers/Api/FathersController.php | 45 +++++++++++++++- backend/routes/api.php | 4 +- 3 files changed, 96 insertions(+), 5 deletions(-) diff --git a/backend/app/Http/Controllers/Api/ChildrenController.php b/backend/app/Http/Controllers/Api/ChildrenController.php index 6aeb07ef..66ad4892 100644 --- a/backend/app/Http/Controllers/Api/ChildrenController.php +++ b/backend/app/Http/Controllers/Api/ChildrenController.php @@ -112,8 +112,56 @@ class ChildrenController extends Controller { // 本登録に成功 return ['status_code' => 200, 'success_messages' => ['本登録に成功しました。'], 'params' => ['tel' => $r->tel, 'password' => $password]]; } - - public function requestPassword () {} + + public function requestPassword (Request $r) { + $validate = Validator::make($r->all(), [ + 'tel' => 'required|numeric|digits_between:0,99999999999|starts_with:0', + ]); + + if ($validate->fails()) { + // バリデーションエラー + return ['status_code' => 422, 'error_messages' => $validate->errors()]; + } + + if ($result = Child::select('id')->where('tel', $r->tel)->first()) { + // メールアドレス照合に失敗 + return ['status_code' => 400, 'error_messages' => ['電話番号が未登録です。入力した情報を確認してください。']]; + } + + $token = bin2hex(random_bytes(16)); + $create = [ + 'type' => 1, + 'child_id' => $result->id, + 'tel' => $r->tel, + 'token' => $token, + 'ttl' => date('Y-m-d H:i:s', time()+28800) + ]; + + try { + // DBに入ります。 + TelActivation::create($create); + + // SMSを送ります。 + // TODO + // SMSの送信に失敗 + // [ + // 'status_code' => 401, + // 'error_messages' => ['SMSの送信に失敗しました。電話番号が使用できるか確認してださい。'], + // ] + } catch (\Throwable $e) { + // 失敗 + Log::critical($e->getMessage()); + return ['status_code' => 400, 'error_messages' => '電話番号が未登録です。入力した情報を確認してください。']; + } + + $params = [ + 'id' => $result->id, + 'tel' => $r->tel, + ]; + + // メールアドレス照合に成功 + return ['status_code' => 200, 'params' => $params, 'success_messages' => ['再発行用パスワードの送信に成功しました。']]; + } public function search (Request $r) { if (!isset($r->keyword)) { diff --git a/backend/app/Http/Controllers/Api/FathersController.php b/backend/app/Http/Controllers/Api/FathersController.php index 386a7991..04192849 100644 --- a/backend/app/Http/Controllers/Api/FathersController.php +++ b/backend/app/Http/Controllers/Api/FathersController.php @@ -27,7 +27,50 @@ class FathersController extends Controller { return new \App\Models\Father(); } - public function requestPassword () {} + public function requestPassword (Request $r) { + $validate = Validator::make($r->all(), [ + 'email' => 'required|max:255|email' + ]); + + if ($validate->fails()) { + // バリデーションエラー + return ['status_code' => 422, 'error_messages' => $validate->errors()]; + } + + if ($result = Father::select('id')->where('email', $r->email)->first()) { + // メールアドレス照合に失敗 + return ['status_code' => 400, 'error_messages' => ['メールアドレスが未登録です。入力した情報を確認してください。']]; + } + + $token = bin2hex(random_bytes(16)); + $create = [ + 'type' => 1, + 'father_id' => $result->id, + 'email' => $r->email, + 'token' => $token, + 'ttl' => date('Y-m-d H:i:s', time()+28800) + ]; + + try { + // DBに入ります。 + EmailActivation::create($create); + + // メールを送ります。 + Mail::to($r->email)->send(new FathersRegistrationTemporaryMail($token)); + } catch (\Throwable $e) { + // 失敗 + Log::critical($e->getMessage()); + return ['status_code' => 400, 'error_messages' => 'メールアドレスが未登録です。入力した情報を確認してください。']; + } + + $params = [ + 'id' => $result->id, + 'email' => $r->email, + ]; + + // メールアドレス照合に成功 + return ['status_code' => 200, 'params' => $params, 'success_messages' => ['再発行用パスワードの送信に成功しました。']]; + } public function registerTemporary (Request $r) { $validate = Validator::make($r->all(), [ diff --git a/backend/routes/api.php b/backend/routes/api.php index fdcaf300..a999e680 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -135,8 +135,8 @@ Route::group(['prefix' => 'fathers'], function () { Route::group(['prefix' => 'children'], function () { Route::post('/registerTemporary', '\App\Http\Controllers\Api\ChildrenController@registerTemporary')->name('childrenregistertemporary'); Route::post('/registerMain', '\App\Http\Controllers\Api\ChildrenController@registerMain')->name('childrenregistermain'); - // Route::post('/requestPassword', '\App\Http\Controllers\Api\ChildrenController@requestPassword')->name('childrenrequestpassword'); - // Route::post('/login', '\App\Http\Controllers\Api\ChildrenController@login')->name('childrenlogin'); + Route::post('/requestPassword', '\App\Http\Controllers\Api\ChildrenController@requestPassword')->name('childrenrequestpassword'); + Route::post('/login', '\App\Http\Controllers\Api\ChildrenController@login')->name('childrenlogin'); Route::group(['middleware' => 'auth:children'], function () { Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail');