Cookieにタイムスタンプを保存していますが、ユーザーによるログイン試行が3回失敗した後、ユーザーがログインページにアクセスできないようにする必要があります(この場合は10秒)。カウンターモーダルを10秒間ポップアップすることで、ログインページへのアクセスを防ぎます。ユーザーがリロード/更新キーをクリックすると、タイムスタンプがゼロ(0)にリセットされ、ログインページにアクセスできることを除いて、すべてが正しく機能します。どうすればこれを防ぐことができますか?
app.controller('LoginAttemptsController', function ($scope, $cookies, $log, $interval, $timeout) {
var counter = 0;
$scope.show = false;
$scope.popup = false;
$scope.newcounter;
$scope.setcookie = function () {
$cookies['myCookieArray'] = {
'key1': 10
};
getmycookiesback = $cookies['myCookieArray'];
$log.info(getmycookiesback.key1);
stop = $interval(function () {
$scope.setnewtimer( getmycookiesback.key1);
getmycookiesback.key1 = $scope.newcounter;
console.log(getmycookiesback.key1);
}, 1000);
};
$scope.setnewtimer = function (timer){
if(timer<=0) {
$scope.popup = false;
$scope.newcounter = 10;
$interval.cancel(stop);
return $scope.newcounter;
}
else {
$scope.newcounter = timer - 1;
return $scope.newcounter;
}
};
$scope.timeoutInit = function () {
$timeout.cancel($scope.timeOutSession);
console.log('timeout handler invoked');
$scope.timeOutSession = $timeout(function (timeOutValue) {
$scope.startCountdown(); // initiates the countdown display
}, $scope.timeOutValue);
};
$scope.checkAttempts = function () {
var username = $scope.Username;
var password = $scope.Password;
if (username == 'kk' && password == 'kk') {
window.location = "./home.html";
} else if (username == 'kk' && password != 'kk') {
$scope.show = true;
$scope.alertMessage = "Sorry, we don't recognize this user";
counter = counter + 1;
} else if (username != 'kk' && password == 'kk') {
$scope.show = true;
$scope.alertMessage = "Sorry, we don't recognize this user";
counter = counter + 1;
/* empty the fields */
$scope.username = '';
$scope.password = '';
} else if (username != 'kk' && password != 'kk') {
$scope.show = true;
$scope.alertMessage = "Sorry, we don't recognize this user";
counter = counter + 1;
}
if (counter == 3) {
counter = 1;
$scope.popup = true;
this.setcookie();
/* window.location = '../login.html'; */
}
};
});
あなたの貢献に感謝します。しかし、私はこれに対する解決策を得ました。回避策の詳細については、https://github.com/emmonmoses/AngularJS-Session-Captcha-Throttle/edit/master/controllers/LoginAttemptsController.jsにアクセスしてください。
var counter = 0;
$scope.setCookie = function(){
mycookie = $cookies.getObject('time');
if(mycookie){
console.log("exists");
if(mycookie.suspendedTime = 0){
$scope.timeobj = {
suspendedTime : 0,
suspendedMinutes : 0,
suspendedSeconds : 0
}
$cookies.putObject('time',$scope.timeobj);
}
else{
cookietime = $cookies.getObject('time');
cookiesuspendedtime = cookietime.suspendedTime;
currenttime = new Date();
console.log(cookiesuspendedtime);
console.log(currenttime.getTime());
var timedifference = (cookiesuspendedtime - currenttime.getTime()) / 1000;
console.log(timedifference);
var minutedifference = Math.floor(timedifference/60);
var seconddifference = Math.floor(timedifference - (minutedifference * 60));
if(timedifference < 120){
$scope.timeobj = {
suspendedTime : cookiesuspendedtime,
suspendedMinutes : minutedifference,
suspendedSeconds : seconddifference
}
$cookies.putObject('time',$scope.timeobj);
this.suspension();
}
else{
$scope.timeobj = {
suspendedTime : 0,
suspendedMinutes : 0,
suspendedSeconds : 0
}
$cookies.putObject('time',$scope.timeobj);
}
}
}
else{
$scope.timeobj = {
suspendedTime : 0,
suspendedMinutes : 0,
suspendedSeconds : 0
}
$cookies.putObject('time',$scope.timeobj);
}
}
$scope.suspension = function(){
$scope.popup = true;
mycookie = $cookies.getObject('time');
if(mycookie.suspendedTime == 0){
newsuspension = new Date();
newsuspension2 = newsuspension.getTime();
console.log(newsuspension2);
newsuspendedtime = newsuspension2 + 120000;
console.log(newsuspendedtime);
$scope.timeobj = {
suspendedTime : newsuspendedtime,
suspendedMinutes :2,
suspendedSeconds : 0
}
$cookies.putObject('time',$scope.timeobj);
console.log("suspended");
}
stop = $interval(function () {
getMyCookie = $cookies.getObject('time');
$scope.suspendedtime = getMyCookie.suspendedTime;
$scope.Minute = getMyCookie.suspendedMinutes;
$scope.Seconds = getMyCookie.suspendedSeconds;
$scope.countdown($scope.Minute, $scope.Seconds);
$scope.timeobj = {
suspendedTime : $scope.suspendedtime,
suspendedMinutes :$scope.Minute,
suspendedSeconds : $scope.Seconds
}
$cookies.putObject('time',$scope.timeobj);
}, 1000);
}
$scope.countdown = function (minutes,seconds){
if(minutes == 0 && seconds == 0){
$interval.cancel(stop);
$scope.popup = false;
$scope.suspendedtime = 0;
$scope.Minute = 2;
$scope.Seconds = 0;
}
else if(minutes == 0 && seconds != 0){
$scope.Seconds--;
}
else if(minutes != 0 && seconds == 0){
$scope.Minute--;
$scope.Seconds = 59;
}
else if($scope.minutes != 0 && $scope.seconds != 0){
$scope.Seconds--;
}
}
$scope.checkAttempts = function () {
var username = $scope.Username;
var password = $scope.Password;
if (username == 'kk' && password == 'kk') {
window.location = "./home.html";
} else if (username == 'kk' && password != 'kk') {
$scope.show = true;
$scope.alertMessage = "Sorry, we don't recognize this user";
counter = counter + 1;
$scope.username = '';
$scope.password = '';
} else if (username != 'kk' && password == 'kk') {
$scope.show = true;
$scope.alertMessage = "Sorry, we don't recognize this user";
counter = counter + 1;
$scope.username = '';
$scope.password = '';
} else if (username != 'kk' && password != 'kk') {
$scope.show = true;
$scope.alertMessage = "Sorry, we don't recognize this user";
counter = counter + 1;
$scope.username = '';
$scope.password = '';
}
if (counter == 3) {
counter = 1;
this.suspension();
}
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加