| | @@ -51,31 +51,19 @@ |
| 51 | 51 | }
|
| 52 | 52 |
|
| 53 | 53 | $userData = $this->purgeOldTokens($userData);
|
| 54 | | - $expire = 0;
|
| 55 | | - $tokenExist = false;
|
| 54 | + $token = bin2hex(random_bytes(64));
|
| 55 | + $expire = time() + $this->tokenDuration;
|
| 56 | + $newToken = [
|
| 57 | + 'token' => $token,
|
| 58 | + 'ip' => $ip,
|
| 59 | + 'createDate' => time(),
|
| 60 | + 'expDate' => $expire,
|
| 61 | + 'lastDate' => time(),
|
| 62 | + 'userAgent' => $_SERVER['HTTP_USER_AGENT'] ?? '不明'
|
| 63 | + ];
|
| 56 | 64 |
|
| 57 | | - foreach ($userData->tokens as $t) {
|
| 58 | | - if ($t->ip === $ip) {
|
| 59 | | - $tokenExist = true;
|
| 60 | | - break;
|
| 61 | | - }
|
| 62 | | - }
|
| 65 | + $userData->tokens[] = $newToken;
|
| 63 | 66 |
|
| 64 | | - if (!$tokenExist) {
|
| 65 | | - $token = bin2hex(random_bytes(64));
|
| 66 | | - $expire = time() + $this->tokenDuration;
|
| 67 | | - $newToken = [
|
| 68 | | - 'token' => $token,
|
| 69 | | - 'ip' => $ip,
|
| 70 | | - 'createDate' => time(),
|
| 71 | | - 'expDate' => $expire,
|
| 72 | | - 'lastDate' => time(),
|
| 73 | | - 'userAgent' => $_SERVER['HTTP_USER_AGENT'] ?? '不明'
|
| 74 | | - ];
|
| 75 | | -
|
| 76 | | - $userData->tokens[] = $newToken;
|
| 77 | | - }
|
| 78 | | -
|
| 79 | 67 | $path = $this->dataDir.$this->id.'.'.$userData->username.'.json';
|
| 80 | 68 | $json = json_encode($userData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
| 81 | 69 |
|
| | @@ -83,20 +71,15 @@ |
| 83 | 71 | return \Result::error('エラー:ユーザーデータの保存に失敗。');
|
| 84 | 72 | }
|
| 85 | 73 |
|
| 86 | | - if (!$tokenExist) {
|
| 87 | | - $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
|
| 88 | | - $domain = $_SERVER['SERVER_NAME'];
|
| 89 | | -
|
| 90 | | - if (!setcookie('kerozen', $token, [
|
| 91 | | - 'expires' => $expire,
|
| 92 | | - 'path' => '/',
|
| 93 | | - 'domain' => $domain,
|
| 94 | | - 'secure' => $secure,
|
| 95 | | - 'httponly' => true,
|
| 96 | | - 'samesite' => 'Strict'
|
| 97 | | - ])) {
|
| 98 | | - return \Result::error('エラー:クッキーを設定に失敗。');
|
| 99 | | - }
|
| 74 | + if (!setcookie('kerozen', $token, [
|
| 75 | + 'expires' => $expire,
|
| 76 | + 'path' => '/',
|
| 77 | + 'domain' => $_SERVER['SERVER_NAME'],
|
| 78 | + 'secure' => (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'),
|
| 79 | + 'httponly' => true,
|
| 80 | + 'samesite' => 'Strict'
|
| 81 | + ])) {
|
| 82 | + return \Result::error('エラー:クッキーを設定に失敗。');
|
| 100 | 83 | }
|
| 101 | 84 |
|
| 102 | 85 | return \Result::success('ログイン成功');
|
| | @@ -111,8 +94,6 @@ |
| 111 | 94 |
|
| 112 | 95 | public function logout(?string $token = null): \Result {
|
| 113 | 96 | if (!AUTH_ENABLED) return \Result::Error('エラー:認証システムは無効です。');
|
| 114 | | - $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
|
| 115 | | - $domain = $_SERVER['SERVER_NAME'];
|
| 116 | 97 | $userData = $this->getUserData();
|
| 117 | 98 |
|
| 118 | 99 | if (!$token) {
|
| | @@ -124,8 +105,8 @@ |
| 124 | 105 | setcookie('kerozen', null, [
|
| 125 | 106 | 'expires' => 0,
|
| 126 | 107 | 'path' => '/',
|
| 127 | | - 'domain' => $domain,
|
| 128 | | - 'secure' => $secure,
|
| 108 | + 'domain' => $_SERVER['SERVER_NAME'],
|
| 109 | + 'secure' => (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'),
|
| 129 | 110 | 'httponly' => true,
|
| 130 | 111 | 'samesite' => 'Strict'
|
| 131 | 112 | ]);
|