Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ee2294e
Issue #1301: ログインエラー表示改善 + ブルートフォース攻撃対策
nobuhiko Jan 17, 2026
8ca7448
Issue #1301: レート制限のタイムゾーン問題とバリデーションエラー記録を修正
nobuhiko Jan 17, 2026
334a715
Issue #1301: ヘッダーログインエラー表示の修正
nobuhiko Jan 17, 2026
acf371b
Issue #1301: ブロックログインエラー表示とE2Eテスト追加
nobuhiko Jan 18, 2026
791263e
Issue #1301: パフォーマンス最適化 - セッションエラー処理の条件付き実行
nobuhiko Jan 18, 2026
7bcf93f
Issue #1301: 不要なExファイルを削除
nobuhiko Jan 18, 2026
699eee7
Issue #1301: ログインエラー表示をAJAX統一対応に改善
nobuhiko Jan 18, 2026
a92d96a
CLAUDE.mdを更新: Issue #1301の学習内容を追加
nobuhiko Jan 18, 2026
fdf7b8a
E2E: ログインページのAJAX対応に伴う修正
nobuhiko Jan 19, 2026
da139a7
Fix: arrErr初期化を無条件に実行、セッションベースのエラー管理を削除
nobuhiko Jan 19, 2026
951919d
Remove CLAUDE.md from repository
nobuhiko Jan 19, 2026
595b0e2
Add CLAUDE.md to .gitignore
nobuhiko Jan 19, 2026
33d002a
Merge branch 'master' into feature/issue-1301-login-error-improvement
nobuhiko Jan 19, 2026
4296c81
Merge remote-tracking branch 'origin/master' into feature/issue-1301-…
nobuhiko Jan 20, 2026
3190b6e
Fix: E2Eテストのログイン判定をURL変更からログアウトボタン表示に変更
nobuhiko Jan 20, 2026
e715106
E2Eテストのログイン処理をAJAX遷移待機に修正
nobuhiko Jan 20, 2026
7f8ce0b
CLAUDE.mdを追加: E2Eテストの実行方法を記載
nobuhiko Jan 20, 2026
6314507
Fix E2E test ERR_ABORTED errors by handling navigation failures
nobuhiko Jan 20, 2026
f997bf4
Merge remote-tracking branch 'origin/master' into feature/issue-1301-…
nobuhiko Jan 28, 2026
d2c0d18
Issue #1301: CodeRabbitAIレビュー指摘への対応
nobuhiko Jan 28, 2026
c53ec89
Issue #1301: ログイン失敗時にHTTP 401を返しパスワードマネージャーの誤認を防止
nobuhiko Jan 28, 2026
d4fb71b
Merge remote-tracking branch 'origin/master' into feature/issue-1301-…
nobuhiko Jan 28, 2026
eff3eb8
fix: composer.lock のマージ不整合を修正
nobuhiko Jan 28, 2026
4767487
fix: レート制限メッセージを6回目の失敗時に即座に表示するよう修正
nobuhiko Jan 28, 2026
ee752e0
fix: レート制限メッセージを5回目の失敗時に即座に表示するよう修正
nobuhiko Jan 28, 2026
4e59703
Merge branch 'master' into feature/issue-1301-login-error-improvement
nobuhiko Jan 29, 2026
e66689a
Fix: SQLite3 CI failure + remove .yarn + EC-CUBE naming convention
nobuhiko Jan 29, 2026
51cc05e
Clean: Remove accidentally committed files
nobuhiko Jan 29, 2026
9e342e9
Clean: Remove eccube_db and add to .gitignore
nobuhiko Jan 29, 2026
13d7e38
Clean: Remove scripts/ directory
nobuhiko Jan 29, 2026
d56fcb2
Clean: Remove screenshots, debug files, and test templates
nobuhiko Jan 29, 2026
2898814
Clean: Remove data/eccube.db
nobuhiko Jan 29, 2026
e3b2fcb
Revert: Remove arrErr initialization from LC_Page.php
nobuhiko Jan 29, 2026
7d73c52
Fix: Add SQLite3 support for date interval queries
nobuhiko Jan 29, 2026
558bd30
Add SC_Helper_LoginRateLimit_Ex for plugin compatibility
nobuhiko Jan 29, 2026
ed89117
Remove SC_Helper_LoginRateLimit_Ex.php
nobuhiko Jan 29, 2026
36e0d73
Revert: Remove test:e2e:local from package.json
nobuhiko Jan 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,22 @@
/html/upload/temp_image/*
/html/upload/temp_plugin/*
/node_modules/*
/.yarn/*
/.pnp.cjs
/.pnp.loader.mjs
/phpunit.xml
/playwright-report/*
/reports/*
/test-results/*
/tests/tmp/*
/vagrant/*
/videos/*
/scripts/*
/screenshots/*
composer.phar
*.cache
*.log
*.tpl.php
eccube_db
/data/eccube.db
!.gitkeep
45 changes: 45 additions & 0 deletions data/Smarty/templates/default/frontparts/bloc/login.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,50 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*}-->

<!--{if !$tpl_login}-->
<script type="text/javascript">//<![CDATA[
$(function(){
$('#login_form').submit(function(e) {
var checkLogin = eccube.checkLoginFormInputted('login_form');
if (checkLogin == false) {
return false;
}

// AJAX対応
e.preventDefault();
$.ajax({
type: "POST",
url: "<!--{$smarty.const.ROOT_URLPATH}-->frontparts/login_check.php",
data: $('#login_form').serialize(),
cache: false,
dataType: "json",
error: function(xhr, textStatus, errorThrown) {
if (xhr.status === 401) {
try {
var result = JSON.parse(xhr.responseText);
if (result.error) {
alert(result.error);
}
} catch (e) {
alert('通信エラーが発生しました。');
}
} else {
alert('通信エラーが発生しました。');
}
},
success: function(result) {
if (result.success) {
location.href = result.success;
}
}
});

return false;
});
});
//]]></script>
<!--{/if}-->

<!--{strip}-->
<div class="block_outer">
<div id="login_area">
Expand All @@ -29,6 +73,7 @@
<input type="hidden" name="mode" value="login" />
<input type="hidden" name="url" value="<!--{$smarty.server.REQUEST_URI|h}-->" />
<div class="block_body">
<div id="login_error_area" class="attention" style="margin: 5px; padding: 5px; background-color: #ffe6e6; border: 1px solid #ff9999;<!--{if !$arrErr.login}--> display: none;<!--{/if}-->"><!--{$arrErr.login|h|nl2br}--></div>
<!--{if $tpl_login}-->
<p>ようこそ<br />
<span class="user_name"><!--{$arrCustomer|format_name|h}--> 様</span><br />
Expand Down
35 changes: 33 additions & 2 deletions data/Smarty/templates/default/frontparts/bloc/login_header.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,45 @@
}
});

$('#header_login_form').submit(function() {
$('#header_login_form').submit(function(e) {
if (!$login_email.val()
|| $login_email.val() == 'メールアドレス') {
if ($('#header_login_area input[name=login_pass]').val()) {
alert('メールアドレス/パスワードを入力して下さい。');
}
return false;
}
return true;

// AJAX対応
e.preventDefault();
$.ajax({
type: "POST",
url: "<!--{$smarty.const.ROOT_URLPATH}-->frontparts/login_check.php",
data: $('#header_login_form').serialize(),
cache: false,
dataType: "json",
error: function(xhr, textStatus, errorThrown) {
if (xhr.status === 401) {
try {
var result = JSON.parse(xhr.responseText);
if (result.error) {
alert(result.error);
}
} catch (e) {
alert('通信エラーが発生しました。');
}
} else {
alert('通信エラーが発生しました。');
}
},
success: function(result) {
if (result.success) {
location.href = result.success;
}
}
});

return false;
});
});
//]]></script>
Expand All @@ -46,6 +76,7 @@
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="url" value="<!--{$smarty.server.REQUEST_URI|h}-->" />
<div class="block_body clearfix">
<div id="header_login_error_area" class="attention" style="margin: 5px 10px; padding: 5px; background-color: #ffe6e6; border: 1px solid #ff9999;<!--{if !$arrErr.login}--> display: none;<!--{/if}-->"><!--{$arrErr.login|h|nl2br}--></div>
<!--{if $tpl_login}-->
<p class="btn">
ようこそ <span class="user_name"><!--{$arrCustomer|format_name|h}--> 様</span>
Expand Down
42 changes: 41 additions & 1 deletion data/Smarty/templates/default/mypage/login.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,57 @@
*/
*}-->

<script type="text/javascript">
function ajaxMyPageLogin() {
var checkLogin = eccube.checkLoginFormInputted('login_mypage');

if (checkLogin == false) {
return false;
}

$.ajax({
type: "POST",
url: "<!--{$smarty.const.ROOT_URLPATH}-->frontparts/login_check.php",
data: $('#login_mypage').serialize(),
cache: false,
dataType: "json",
error: function(xhr, textStatus, errorThrown) {
if (xhr.status === 401) {
try {
var result = JSON.parse(xhr.responseText);
if (result.error) {
$('#login_error_area').html(result.error.replace(/\n/g, '<br>')).show();
}
} catch (e) {
alert('通信エラーが発生しました。');
}
} else {
alert('通信エラーが発生しました。');
}
},
success: function(result) {
if (result.success) {
location.href = result.success;
}
}
});

return false;
}
</script>

<div id="undercolumn">
<h2 class="title"><!--{$tpl_title|h}--></h2>
<div id="undercolumn_login">
<form name="login_mypage" id="login_mypage" method="post" action="<!--{$smarty.const.HTTPS_URL}-->frontparts/login_check.php" onsubmit="return eccube.checkLoginFormInputted('login_mypage')">
<form name="login_mypage" id="login_mypage" method="post" action="?" onsubmit="return ajaxMyPageLogin()">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="mode" value="login" />
<input type="hidden" name="url" value="<!--{$smarty.server.REQUEST_URI|h}-->" />

<div class="login_area">
<h3>会員登録がお済みのお客様</h3>
<p class="inputtext">会員の方は、登録時に入力されたメールアドレスとパスワードでログインしてください。</p>
<div id="login_error_area" class="attention" style="margin-bottom: 10px;<!--{if !$arrErr.login}--> display: none;<!--{/if}-->"><!--{$arrErr.login|h|nl2br}--></div>
<div class="inputbox">
<dl class="formlist clearfix">
<!--{assign var=key value="login_email"}-->
Expand Down
42 changes: 41 additions & 1 deletion data/Smarty/templates/default/shopping/index.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,56 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*}-->

<script type="text/javascript">
function ajaxLogin() {
var checkLogin = eccube.checkLoginFormInputted('member_form');

if (checkLogin == false) {
return false;
}

$.ajax({
type: "POST",
url: "<!--{$smarty.const.ROOT_URLPATH}-->shopping/index.php",
data: $('#member_form').serialize(),
cache: false,
dataType: "json",
error: function(xhr, textStatus, errorThrown) {
if (xhr.status === 401) {
try {
var result = JSON.parse(xhr.responseText);
if (result.error) {
$('#login_error_area').html(result.error).show();
}
} catch (e) {
alert('通信エラーが発生しました。');
}
} else {
alert('通信エラーが発生しました。');
}
},
success: function(result) {
if (result.success) {
location.href = '<!--{$smarty.const.ROOT_URLPATH}-->shopping/' + result.success;
}
}
});

return false;
}
</script>

<div id="undercolumn">
<div id="undercolumn_login">
<h2 class="title"><!--{$tpl_title|h}--></h2>
<form name="member_form" id="member_form" method="post" action="?" onsubmit="return eccube.checkLoginFormInputted('member_form')">
<form name="member_form" id="member_form" method="post" action="?" onsubmit="return ajaxLogin()">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="mode" value="login" />

<div class="login_area">
<h3>会員登録がお済みのお客様</h3>
<p class="inputtext">会員の方は、登録時に入力されたメールアドレスとパスワードでログインしてください。</p>
<div id="login_error_area" class="attention" style="margin-bottom: 10px;<!--{if !$arrErr.login}--> display: none;<!--{/if}-->"><!--{$arrErr.login|h|nl2br}--></div>
<div class="inputbox">
<dl class="formlist clearfix">
<!--{assign var=key value="login_email"}-->
Expand Down
3 changes: 3 additions & 0 deletions data/Smarty/templates/mobile/mypage/login.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
<input type="hidden" name="mode" value="login">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->">
<input type="hidden" name="url" value="<!--{$smarty.server.REQUEST_URI|h}-->">
<!--{if $arrErr.login}-->
<font color="#FF0000"><!--{$arrErr.login|h|nl2br}--></font><br>
<!--{/if}-->
<!--{if !$tpl_valid_phone_id}-->
●メールアドレス<br>
<!--{assign var=key value="login_email"}-->
Expand Down
3 changes: 3 additions & 0 deletions data/Smarty/templates/mobile/shopping/index.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
<form name="member_form" id="member_form" method="post" action="?">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->">
<input type="hidden" name="mode" value="login">
<!--{if $arrErr.login}-->
<font color="#FF0000"><!--{$arrErr.login|h|nl2br}--></font><br>
<!--{/if}-->
<!--{if !$tpl_valid_phone_id}-->
■以前にご注文された方<br>
(モバイル又はPCでご登録済み)<br>
Expand Down
3 changes: 3 additions & 0 deletions data/Smarty/templates/sphone/frontparts/bloc/login_header.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
*}-->

<nav class="header_navi">
<!--{if $arrErr.login}-->
<div class="attention" style="margin: 5px; padding: 5px; background-color: #ffe6e6; border: 1px solid #ff9999;"><!--{$arrErr.login|h|nl2br}--></div>
<!--{/if}-->
<!--{if $tpl_login}-->
<p class="guest">ようこそ <a href="<!--{$smarty.const.HTTPS_URL}-->mypage/login.php"><!--{$arrCustomer|format_name|h}--> 様</a></p>
<!--{if $smarty.const.USE_POINT !== false}-->
Expand Down
19 changes: 14 additions & 5 deletions data/Smarty/templates/sphone/shopping/index.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,23 @@
data: postData,
cache: false,
dataType: "json",
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(textStatus);
error: function(xhr, textStatus, errorThrown){
if (xhr.status === 401) {
try {
var result = JSON.parse(xhr.responseText);
if (result.error) {
alert(result.error);
}
} catch (e) {
alert('通信エラーが発生しました。');
}
} else {
alert('通信エラーが発生しました。');
}
},
success: function(result){
if (result.success) {
location.href = '<!--{$smarty.const.ROOT_URLPATH}-->shopping/' + result.success;
} else {
alert(result.login_error);
}
}
});
Expand All @@ -56,7 +65,7 @@

<section id="slidewindow">
<h2 class="title"><!--{$tpl_title|h}--></h2>
<form name="member_form" id="member_form" method="post" action="javascript:;" onSubmit="return ajaxLogin()">
<form name="member_form" id="member_form" method="post" action="?" onSubmit="return ajaxLogin()">
<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
<input type="hidden" name="mode" value="login" />
<div class="login_area">
Expand Down
Loading
Loading