0

Der folgende Code ist mein service.js.Wie kann ich mich abmelden, wenn mein Token abgelaufen und nicht autorisiert ist? Müssen wir lokalen Speicher einstellen? kann mir jemand helfen oder mir empfehlen, wie kann ich das Ergebnis erreichen, das ich Auth meine controller.js für for.Thanks im VorausWie kann ich mich abmelden, wenn mein Token abgelaufen und nicht autorisiert ist?

'use strict'; 

angular.module('Authentication') 

.factory('AuthenticationService', ['Base64', '$http', '$cookieStore', '$rootScope', '$timeout', 
function (Base64, $http, $cookieStore, $rootScope, $timeout) { 
     var service = {}; 

     service.Login = function (callback) { 
      //authenticate data http 
      $http.post('http://117d8128.ngrok.io/api/authenticate') 
       .then(function (response) { 
        callback(response); 
       }); 

     }; 

     service.SetCredentials = function (username, password) { 
      var authdata = Base64.encode(username + ':' + password); 
      $rootScope.globals = { 
       currentUser: { 
        username: username, 
        authdata: authdata 
       } 
      }; 
      $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata; 
      $cookieStore.put('globals', $rootScope.globals); 
     }; 

     service.ClearCredentials = function() { 
      $rootScope.globals = {}; 
      $cookieStore.remove('globals'); 
      $http.defaults.headers.common.Authorization = 'Basic '; 
     }; 

     return service; 


}]) 

.factory('TokenService', ['Base64', '$http', '$cookieStore', '$rootScope', '$timeout', 
function (Base64, $http, $cookieStore, $rootScope, $timeout) { 
     var service = {}; 

     service.SetToken = function (token) { 

      $http.defaults.headers.common['auth-token'] = token; 
      $cookieStore.put('globals', $rootScope.globals); 
     }; 
     return service; 
}]) 

.factory('Base64', function() { 


    var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/='; 

    return { 
     encode: function (input) { 
      var output = ""; 
      var chr1, chr2, chr3 = ""; 
      var enc1, enc2, enc3, enc4 = ""; 
      var i = 0; 

      do { 
       chr1 = input.charCodeAt(i++); 
       chr2 = input.charCodeAt(i++); 
       chr3 = input.charCodeAt(i++); 

       enc1 = chr1 >> 2; 
       enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
       enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
       enc4 = chr3 & 63; 

       if (isNaN(chr2)) { 
        enc3 = enc4 = 64; 
       } else if (isNaN(chr3)) { 
        enc4 = 64; 
       } 

       output = output + 
        keyStr.charAt(enc1) + 
        keyStr.charAt(enc2) + 
        keyStr.charAt(enc3) + 
        keyStr.charAt(enc4); 
       chr1 = chr2 = chr3 = ""; 
       enc1 = enc2 = enc3 = enc4 = ""; 
      } while (i < input.length); 

      return output; 
     }, 

     decode: function (input) { 
      var output = ""; 
      var chr1, chr2, chr3 = ""; 
      var enc1, enc2, enc3, enc4 = ""; 
      var i = 0; 

      // remove all characters that are not A-Z, a-z, 0-9, +, /, or = 
      var base64test = /[^A-Za-z0-9\+\/\=]/g; 
      if (base64test.exec(input)) { 
       window.alert("There were invalid base64 characters in the input text.\n" + 
        "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" + 
        "Expect errors in decoding."); 
      } 
      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 

      do { 
       enc1 = keyStr.indexOf(input.charAt(i++)); 
       enc2 = keyStr.indexOf(input.charAt(i++)); 
       enc3 = keyStr.indexOf(input.charAt(i++)); 
       enc4 = keyStr.indexOf(input.charAt(i++)); 

       chr1 = (enc1 << 2) | (enc2 >> 4); 
       chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
       chr3 = ((enc3 & 3) << 6) | enc4; 

       output = output + String.fromCharCode(chr1); 

       if (enc3 != 64) { 
        output = output + String.fromCharCode(chr2); 
       } 
       if (enc4 != 64) { 
        output = output + String.fromCharCode(chr3); 
       } 

       chr1 = chr2 = chr3 = ""; 
       enc1 = enc2 = enc3 = enc4 = ""; 

      } while (i < input.length); 

      return output; 
     } 
    }; 

}); 

Dies ist suchen

'use strict'; 

angular.module('Authentication') 
.controller('LoginController', ['$scope', '$rootScope', '$location', 
'AuthenticationService', 'TokenService', '$http', 
function ($scope, $rootScope, 
$location,AuthenticationService,TokenService,$http) { 
    // login status 
    AuthenticationService.ClearCredentials(); 
    $scope.login = function() { 
     $scope.dataLoading = true; 
     AuthenticationService.SetCredentials($scope.username, $scope.password); 
     AuthenticationService.Login(function (response) { 
      if (response.data.success) { 

       TokenService.SetToken(response.data.token); 
       $http.post('http://117d8128.ngrok.io/api/users') 
       .then(function(response){ 
        console.log(response); 
        $location.path('/'); 
       }); 


      } else { 
       $scope.error = response.message; 
       $scope.dataLoading = false; 
      } 
     }); 
    }; 
}]); 

die unter my home is Regler. Wenn das Token unauth ist, sollte es sich abmelden. Aber es meldet sich nicht ab. Kann mir jemand helfen?

'use strict'; 

    angular.module('Home') 

    .controller('HomeController', 
['$scope', 
function ($scope,$http) { 
    $http.post('http://117d8128.ngrok.io/api/users') 
       .then(function(response){ 
        console.log(response); 
        $location.path('/'); 
       }); 

}]); 

die Hauptsteuerung

'use strict'; 

    // modules 
    angular.module('Authentication', []); 
    angular.module('Home', []); 

angular.module('HttpAuth', [ 
'Authentication', 
'Home', 
'ngRoute', 
'ngCookies' 
]) 

.config(['$routeProvider', function ($routeProvider) { 

$routeProvider 
    .when('/login', { 
     controller: 'LoginController', 
     templateUrl: 'modules/authentication/views/login.html' 
    }) 

    .when('/', { 
     controller: 'HomeController', 
     templateUrl: 'modules/home/views/home.html' 
    }) 

    .otherwise({ redirectTo: '/login' }); 
}]) 

.run(['$rootScope', '$location', '$cookieStore', '$http', 
function ($rootScope, $location, $cookieStore, $http) { 
    // keep user logged in after page refreshed 
    $rootScope.globals = $cookieStore.get('globals') || {}; 
    if ($rootScope.globals.currentUser) { 
     $http.defaults.headers.common['Authorization'] = 'Basic ' + 
$rootScope.globals.currentUser.authdata; 
    } 

    $rootScope.$on('$locationChangeStart', function (event, next, current) { 
     // redirect to login page if not logged in 
     if ($location.path() !== '/login' && !$rootScope.globals.currentUser) { 
      $location.path('/login'); 
     } 
    }); 
}]); 

Antwort

0

Sobald Benutzer angemeldet ist erfolgreich in, dann können Sie speichern Token in localstorage.

//Storing token in local Storage 
    service.setToken(token){ 
    $window.localStorage.setItem('token', token); 
} 


Auf dem Haupt-Controller, bei jeder Anfrage können Sie prüfen, ob Token vorhanden/abgelaufen ist.

//Getting token from local Storage 
service.getToken(token){ 
return $window.localStorage.getItem(token); 
} 
if(service.getToken()){ 
    //Proceed in the application 
}else{ 
//logout & redirect to homepage/login page 
} 


Dies ist der jist davon ist, können Sie über Code entsprechend Ihre Anforderungen ändern.

+0

Danke, mayank.Will es ausprobieren :) – Manoj

+0

sicher, fühlen Sie sich frei, mich auf weitere Zweifel ping :) –

+0

mayank Ich verwendete Cookie-Speicher anstelle von lokalen Speicher. Ich benutze $ cookieStore.get ('globals'). Funktioniert das? überprüfen Sie bitte mein Hauptsteuerpult im oben genannten code redigiert. Danke – Manoj

Verwandte Themen