Ich habe durch dieses Tutorial https://thinkster.io/tutorials/mean-stack/creating-an-angular-service-for-authentication gearbeitet. Ich erhalte den Fehler 'konnte nicht atob auf Fenster ausführen'. Ich bin ziemlich sicher, dass der Fehler innerhalb der Auth-Fabrik ist, insbesondere die auth.isLoggedIn-Funktion, ich habe console.log die Antwort vom Server und kopiere und steckte das Token in jwt.io und es überprüft, wie es sein soll. Mit der Dekodierfunktion stimmt also etwas nicht. Ich habe versucht, $window.atob zu erforschen, um das zu verstehen und richtig zu debuggen, aber ich verstehe nicht. Das jwt.sign in meinem userSchema hat keine Funktion namens .btoa verwendet. Obwohl das Tutorial sagt, dass .atob zum Decodieren verwendet werden soll, scheint das nicht richtig zu sein. Wie dekodiere ich das Token in meiner eckigen Fabrik, um in dieser Payload-Variable zu speichern?'Atob auf Fenster konnte nicht ausgeführt werden' unsicher, ob es die Nutzlast schreiben oder die Funktion es zu decodieren
var payload = JSON.parse($window.atob(token.split('.')[1]));
Angular App Datei
app.factory('auth', ['$http', '$window', function($http, $window){
var auth = {};
auth.saveToken = function(token){
$window.localStorage['rawle_news_app'] = token;
};
auth.getToken = function(){
return $window.localStorage['rawle_news_app'];
}
auth.isLoggedIn = function(){
var token = auth.getToken();
if(token){
var payload = JSON.parse($window.atob(token.split('.')[1]));
return payload.exp > Date.now()/1000;
}else{
return false;
}
};
auth.currentUser = function(){
if(auth.isLoggedIn()){
var token = auth.getToken();
var payload = JSON.parse($window.atob(token.split('.')[1]));
return payload.username;
}
};
auth.register = function(user){
return $http.post('/register', user).then(function(data){
auth.saveToken(data.token);
});
};
auth.logIn = function(user){
return $http.post('/login', user).then(function(data){
auth.saveToken(data.token);
});
};
auth.logOut = function(){
$window.localStorage.removeItem('rawle_news_app');
};
return auth;
}])