AngularJS:Cookieに保存されているタイマーカウントダウンを使用して、ページをしばらく非アクティブにするにはどうすればよいですか?

エモン

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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ