2015-05-14 3 views
-1

Я создаю веб-сайт, и сейчас я работаю над подробностями входа.Паспорт Javascript - всегда получает «неавторизованный»

Я использую плагин Passport для приложения fullstack, но каждый раз, когда я пытаюсь войти, я получаю «неавторизованный», независимо от того, что я делаю.

ВХОД УПРАВЛЕНИЯ

$scope.login = function(form) { 
    $scope.submitted = true; 

    if(form.$valid) { 
    Auth.login({ 
     email: $scope.user.email, 
     password: $scope.user.password, 
    }) 
    .then(function() { 
     // Logged in, redirect to home 
     $location.path('/'); 
    }) 
    .catch(function(err) { 
     $scope.errors.other = err.message; 
     console.log(err); 
    }); 
    } 
}; 

AUTH ОБСЛУЖИВАНИЕ

login: function(user, callback) { 
    var cb = callback || angular.noop; 
    var deferred = $q.defer(); 

    $http.post('/auth/local', { 
     email: user.email, 
     password: user.password 
    }). 
    success(function(data) { 
     $cookieStore.put('token', data.token); 
     currentUser = User.get(); 
     deferred.resolve(data); 
     return cb(); 
    }). 
    error(function(err) { 
     this.logout(); 
     deferred.reject(err); 
     return cb(err); 
    }.bind(this)); 

    return deferred.promise; 
    }, 

Serverside index.js

'use strict'; 

var express = require('express'); 
var passport = require('passport'); 
var auth = require('../auth.service'); 

var router = express.Router(); 

router.post('/', function(req, res, next) { 
    passport.authenticate('local', function (err, user, info) { 
    var error = err || info; 
    if (error) return res.json(401, error); 
    if (!user) return res.json(404, {message: 'Something went wrong, please try again.'}); 

    var token = auth.signToken(user._id, user.role); 
    res.json({token: token}); 
    })(req, res, next) 
}); 

module.exports = router; 

Я относительно новый с плагином для паспорта, поэтому я не знаю, где найти ошибку. Скажите, нужен ли вам больше кода.

Это сообщение, которое я получаю от консоли:

Failed to load resource: the server responded with a status of 401  (Unauthorized) angular.js:9866 
GET http://localhost:9000/api/users/me 401 (Unauthorized) 
+0

нужно больше кода :) Нужно видеть ваш вызов 'passport.use'. –

+0

Мне не хватает кода в моем проекте, который вызвал проблему – Detilium

ответ

-1

найденную неполадку

мне не хватает какой-то код. Я не знаю, почему, но я это сделал. Проблема решена.

Код, который отсутствовал в app.js:

.factory('authInterceptor', function ($rootScope, $q, $cookieStore, $location) { 
return { 
    // Add authorization token to headers 
    request: function (config) { 
    config.headers = config.headers || {}; 
    if ($cookieStore.get('token')) { 
     config.headers.Authorization = 'Bearer ' + $cookieStore.get('token'); 
    } 
    return config; 
    }, 

    // Intercept 401s and redirect you to login 
    responseError: function(response) { 
    if(response.status === 401) { 
     $location.path('/login'); 
     // remove any stale tokens 
     $cookieStore.remove('token'); 
     return $q.reject(response); 
    } 
    else { 
     return $q.reject(response); 
    } 
    } 
}; 
}) 

.run(function ($rootScope, $location, Auth) { 
    // Redirect to login if route requires auth and you're not logged in 
    $rootScope.$on('$stateChangeStart', function (event, next) { 
     Auth.isLoggedInAsync(function(loggedIn) { 
     if (next.authenticate && !loggedIn) { 
      $location.path('/login'); 
     } 
     }); 
    }); 
}); 
+0

Рад, что вам удалось решить вашу проблему! В интересах других пользователей SO, которые могли бы увидеть это в результатах поиска, было бы хорошо либо удалить этот вопрос прямо, либо хотя бы показать, что вы сделали, чтобы исправить проблему. –

Смежные вопросы