このリポジトリは2023-09-09にアーカイブされています。 ファイルの閲覧とクローンは可能ですが、プッシュ、イシューの作成、プルリクエストはできません。
kikikan/backend/app/Http/Controllers/Api/AdminController.php

69 行
2.6 KiB
PHP
Raw 通常表示 履歴

2021-10-15 10:37:47 +09:00
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\Models\Admin;
use App\Models\LoginLimits;
class AdminController extends Controller {
public function login (Request $r) {
if ($r->session()->has('email')) {
return redirect()->intended();
}
2021-10-15 15:49:43 +09:00
if (null === $r->server('HTTP_USER_AGENT')) {
return ['status_code' => 400, 'error_message' => ['不正なuser_agent。']];
}
if (null !== ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first())) {
2021-10-16 13:04:25 +09:00
if ((time() >= strtotime($ll->updated_at) + 600) === false) {
LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->delete();
}
2021-10-15 15:49:43 +09:00
if ($ll->fail_number >= 10) {
return ['status_code' => 400, 'error_message' => ['10回連続で失敗しましたので、10分、ログインロックになりました。']];
}
}
2021-10-15 10:37:47 +09:00
$validate = Validator::make($r->all(), [
'email' => 'required|max:255|email',
2021-10-15 15:49:43 +09:00
'password' => 'required|min:8|max:72',
2021-10-15 10:37:47 +09:00
]);
if ($validate->fails()) {
// バリデーションエラー
return ['status_code' => 422, 'error_messages' => $validate->errors()];
}
// 存在しない場合
2021-10-15 15:49:43 +09:00
if (null === ($admin = Admin::select('id', 'email', 'password')->where('email', $r->email)->first())) {
return ['status_code' => 400, 'error_message' => ['このアカウントが存在しません。']];
2021-10-15 10:37:47 +09:00
}
// パスワードが異なる場合
2021-10-15 15:49:43 +09:00
if (!Hash::check($r->password, $admin->password)) {
if ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first()) {
2021-10-16 13:04:25 +09:00
LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->update(['fail_number' => $ll->fail_number+1]);
2021-10-15 15:49:43 +09:00
}
else {
LoginLimits::create(['user_agent' => $r->server('HTTP_USER_AGENT'), 'fail_number' => 1]);
}
2021-10-15 10:37:47 +09:00
return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']];
}
// セッションを想像する
$r->session()->put('email', $admin->email);
return ['status_code' => 200];
}
public function logout (Request $r) {
// セッションを破壊する
$r->session()->forget('email');
2021-10-15 10:37:47 +09:00
return ['status_code' => 200];
}
}