angularjs - Angular Error: Request header field x-access-token is not allowed by Access-Control-Allow-Headers -
i'm new using api's i'm attempting json data open weather api. in app, when user logged in cannot retrieve data , error above. how can allow user access app , have access api's data? not sure how set headers issue.
app.js
//./public/app/app.js angular.module('swellsapp', [ 'approutes', 'authservice', 'userservice', 'weatherservice', 'mainctrl', 'userctrl', 'weatherctrl', 'ngmessages' ]) //application configuration integrate tokens our requests .config(function($httpprovider){ //attach auth interceptor http requests $httpprovider.interceptors.push('authinterceptor'); });
authservice.js
// authservice.js angular.module('authservice', []) // ============================================ //auth factory login , information //inject $http communicating api //inject $q return promise objects //inject authtoken manage tokens // ============================================ .factory('auth', function($http, $q, authtoken){ //create auth factory object var authfactory = {}; // handle login users // post request /api/authenticate authfactory.login = function(username, password){ //return promise object , data return $http.post('/api/authenticate', { username: username, password: password }) .success(function(data){ authtoken.settoken(data.token); return data; }); }; //log user out clearing token useing authtoken factory authfactory.logout = function(){ //clear token authtoken.settoken(); }; //check if user logged in , check if there local token authfactory.isloggedin = function(){ if(authtoken.gettoken()) return true; else return false; }; //get logged in user authfactory.getuser = function(){ if(authtoken.gettoken()) return $http.get('/api/me'); else return $q.reject({message: "user doesn't have token"}); }; //return auth factory object return authfactory; })//end auth // ============================================ // factory handling tokens // inject $window store token on client-side // ============================================ .factory('authtoken', function($window){ var authtokenfactory = {}; //get token out of local storage authtokenfactory.gettoken = function(){ return $window.localstorage.getitem('token'); }; //set token or clear token //if token passed, set token - if there no token, clear local storage authtokenfactory.settoken = function(token){ if(token) $window.localstorage.setitem('token', token); else $window.localstorage.removeitem('token'); }; //return auth token factory return authtokenfactory; })//end authtoken // ============================================ // application configuration integrate token requests // ============================================ .factory('authinterceptor', function($q, $location, authtoken){ var interceptorfactory = {}; //attach token http requests interceptorfactory.request = function(config){ //grab token var token = authtoken.gettoken(); //if token exists add header x-access-token if(token) config.headers['x-access-token'] = token; return config; }; //on response errors interceptorfactory.responseerror = function(response){ //if server returns 403 forbidden response if(response.status == 403) $location.path('/login'); //return errors server promise return $q.reject(response); } //return interceptorfactory return interceptorfactory; });//end authinterceptor
weatherservice.js
//weatherservice.js angular.module('weatherservice', []) .factory('weather', function($http, $q){ //create empty weather factory weatherfactory = {}; //make request weather weatherfactory.getweather = function(zip){ $http.get('http://api.openweathermap.org/data/2.5/forecast/city?id=524901') .success(function(data){ console.log(data); }) .error(function(err){ console.log('error getting data'); }); return $q.reject(zip); };//end getweather //return weatherfactory; return weatherfactory; });//end weather factory
Comments
Post a Comment