Я слежу за учебником по названию средней машины. Это было очень полезно. Я настраиваю аутентификацию и не могу понять эту ошибку, которую я получаю.Токен не определен - MEAN Stack
Любая помощь была бы принята с благодарностью! Кажется, я не могу найти ответ нигде.
ОШИБКА: маркер не определен на Object.authTokenFactory.setToken (authService.js: 69)
authService.js:
angular.module('authService', [])
// ===================================================
// auth factory to login and get information
// inject $http for communicating with the API
// inject $q to return promise objects
// inject AuthToken to manage tokens
// ===================================================
.factory('Auth', function($http, $q, AuthToken) {
\t // create auth factory obj
\t var authFactory = {};
\t // login user
\t authFactory.login = function(username, password) {
\t \t // return promise obj and its data
\t \t return $http.post('/api/authenticate', {
\t \t \t username: username,
\t \t \t password: password
\t \t })
\t \t .success(function(data) {
\t \t \t AuthToken.setToken(data.token);
\t \t \t return data;
\t \t });
\t };
\t
\t // logout user by clearing token
\t authFactory.logout = function() {
\t \t AuthToken.setToken();
\t };
\t
\t // check if user is logged in
\t // checks for local token
\t authFactory.isLoggedIn = function() {
\t \t if (AuthToken.getToken())
\t \t \t return true;
\t \t else
\t \t \t return false;
\t };
\t
\t // get logged in user
\t authFactory.getUser = function() {
\t \t if (AuthToken.getToken())
\t \t \t return $http.get('/api/me', { cache : true});
\t \t else
\t \t \t return $q.reject({ message : 'User has no token.'});
\t };
\t
\t
\t
\t return authFactory;
})
// ===================================================
// factory for handling tokens
// inject $window to store token client-side
//
//
// ===================================================
.factory('AuthToken', function($window) {
\t var authTokenFactory = {};
\t
\t // get token out of local storage
\t authTokenFactory.getToken = function() {
\t \t return $window.localStorage.getItem('token');
\t };
\t // function to set token or clear token
\t // if a token is passed, set the token
\t // if there is no token, clear it from local storage
\t authTokenFactory.setToken = function() {
\t \t if (token)
\t \t \t $window.localStorage.setItem('token', token);
\t \t else
\t \t \t $window.localStorage.removeItem('token');
\t };
\t
\t return authTokenFactory;
})
// ===================================================
// application configuration to integrate token into requests
// ===================================================
.factory('AuthInterceptor', function($q, $location, AuthToken) {
\t var interceptorFactory = {};
\t
\t // this will happen on all http requests
\t interceptorFactory.request = function(config) {
\t \t // grab token
\t \t var token = AuthToken.getToken;
\t \t // if token exists add it to the header as x-access-token
\t \t if (token)
\t \t \t config.headers['x-access-token'] = token;
\t \t \t
\t \t \t return config;
\t };
\t
\t // happens on response errors
\t interceptorFactory.responseError = function(response) {
\t \t // if 403 from server
\t \t if (response.status == 403) {
\t \t \t AuthToken.setToken();
\t \t \t $location.path('/login')
\t \t }
\t \t //return the errors from server as promise
\t \t return $q.reject(response);
\t };
\t
\t return interceptorFactory;
});
mainCtrl.js
angular.module('mainCtrl', [])
.controller('MainController', function($rootScope, $location, Auth) {
\t var vm = this;
\t
\t // get info if a person is logged in
\t vm.loggedIn = Auth.isLoggedIn();
\t
\t // check to see if user is logged in on every req
\t $rootScope.$on('$routeChangeStart', function() {
\t \t vm.loggedIn = Auth.isLoggedIn();
\t \t
\t \t // get user info on route change
\t \t // Auth.getUser()
\t \t // .success(function(data) {
\t \t // \t vm.u = data;
\t \t // });
\t \t Auth.getUser().then(function (data) {
\t \t vm.user = data;
\t \t },
\t \t function (response) {
\t \t \t // Handle case where user is not logged in
\t \t \t // or http request fails
\t \t });
\t });
\t
\t // handle login form
\t vm.doLogin = function() {
\t \t vm.processing = true;
\t \t // clear error
\t \t vm.error = '';
\t \t
\t \t // call Auth.login() func
\t \t Auth.login(vm.loginData.username, vm.loginData.password)
\t \t \t .success(function(data) {
\t \t \t \t vm.processing = false;
\t \t \t \t //if a user logs in, redirect to users pg
\t \t \t \t if (data.success)
\t \t \t \t \t $location.path('/users');
\t \t \t \t else
\t \t \t \t \t vm.error = data.message;
\t \t \t \t
\t \t \t \t
\t \t \t });
\t };
\t
\t // log out
\t vm.doLogOut = function() {
\t \t Auth.logout();
\t \t vm.u = {};
\t \t $location.path('/login');
\t };
});
Это происходит после того, как я отправлю свою регистрационную форму. Я не уверен, почему он не будет установлен:/ –
Я не уверен, что вы подразумеваете под // Добавить эту переменную delcaration –
В вашем коде setToken не принимает никаких параметров. Вам нужно добавить токен в качестве параметра функции. –