2016-06-09 15 views
0

Ich implementiere Logout-Funktion. Ich benutze diese Technologien zum ersten Mal, also kann mir bitte helfen. Verwendung: AngularJS Node.js RedisWie kann ich meine App mit REDIS + Node.js abmelden

AngularJS Code

<md-button md-no-ink class="md-primary" ng-click="logoutCall()">logout</md-button> 

Controller.js

$scope.logoutCall = function(){ 
     var req = $http.get("api/logout"); 
     console.log(" in side logout call function!"); 
     // some fun stuff .... 

} 

Redis Code

router.route("/logout") 
    .get(
     function(req, res){ 
      verifyAuth(req, res, function(err, authorized){ 
       if(err){ 
        res.json(err); 
        return; 
       }; 
      // ---- fun stuff conti. ----- 
      console.log("regis api/logout"); 
      }); 
    }); 

Funktion verifyAuth()

//verify authorization 
var verifyAuth = function(req, res, callBack){ 

    if(req.headers && req.headers.hasOwnProperty("x-auth-token")){ 
     // get the redis client and try to get the corresponding object using the auth_token as a key 
     var redisClient = redis.getClient(); 
     redisClient.get('auth_token.' + req.headers["x-auth-token"], function(err, reply){ 
      if(err || !reply){ 
       callBack({error:"Unauthorized: Please sign in"}); 
       return; 
      } 

      // refresh the session expire to 20 mins 
      redisClient.expire('auth_token.' + req.headers["x-auth-token"], 1200); 
      req.user = JSON.parse(reply); 
      callBack(null, true); 

     }); 
    }else{ 
     callBack({error:"Missing Authentication: Please sign in"}); 
     return; 
    } 
}; 
+1

gut, können Sie ein Token einen Laden in redis unter einer einzigartigen-Taste (User-ID) und beim Abmelden generieren, können Sie den Schlüssel aus dem redis löschen. – Nivesh

+0

danke @Nivesh für schnelle Antwort, aber können Sie etwas Code teilen .. ?? –

Antwort

0

ich die Lösung gefunden:

// Logout-Route Redis Code

router.route("/logout") 
     .get(
      function(req, res){ 
       var redisClient = redis.getClient(); 
       redisClient.del('auth_token.' + req.headers["x-auth-token"], function(err, reply){ 
        if(!err || reply){ 
         console.log("del token "); 
         res.sendStatus(401); 
         return; 
       } 


      }); 
     }); 

Verwenden Http interc eptor, um diesen Fehlercode zu erfassen. HttpInterceptor:

function responseError(response) { 

    console.log("inside responseError" + response.status); 
     switch (response.status) { 
      //...can handle different error codes differently 

      case 401: 
       $rootScope.$broadcast('httpError', { message: 'logout successful' }); 

       $state.go('login page'); 
       break; 
     } 

     return $q.reject(response); 
    }