Я пытаюсь реализовать постоянный логин для углового приложения. Постоянным я имею в виду, что я могу перенаправить на новую страницу или обновить, не выйдя из системы.GET маршрут не попадает в угловое приложение
Глядя на отладчик, не появляется, что мой/api/user route когда-либо попадает. api/sessions и я не уверен, почему другого не было бы.
мой код:
routes.js
app.post('/api/sessions', function(req, res, next) {
User.findOne({username: req.body.username})
.select('password').select('username')
.exec(function(err, user){
if (err) {return next(err)}
if (!user) {return res.send(401)}
bcrypt.compare(req.body.password, user.password, function (err, valid){
if (err) {return next(err)}
if (!valid) {return res.send(401)}
var token = jwt.encode({username: user.username}, config.secret)
res.send(token)
})
})
})
app.get('/api/users', function(req, res, next) {
if(!req.headers['x-auth']){
return res.send(401)
}
var auth = jwt.decode(req.headers['x-auth'], config.secret)
User.findOne({username: auth.username}, function (err,user){
if (err) {return next(err)}
res.json(user)
})
})
app.post('/api/users', function(req, res, next) {
var user = new User({username: req.body.username})
bcrypt.hash(req.body.password, 10, function (err, hash){
if (err) {return next (err)}
user.password = hash
user.save(function (err){
res.send(201)
})
})
})
angular.js
app.service('UserSvc', function($http, $window){
var svc = this;
svc.getUser = function() {
return $http.get('/api/users',{
headers: { 'X-Auth': this.token }
})
}
svc.login = function(username, password){
return $http.post('/api/sessions', {
username: username, password: password
}).then(function(val){
svc.token = val.data
// window.localStorage.token = val.data
return svc.getUser()
})
}
svc.logout = function() {
$http.post('/api/sessions', {
username: null, password: null
}).then(function(val){
svc.token = null
// window.localStorage.token = val.data
})
}
})
app.controller('LoginCtrl', function($scope, $location, UserSvc){
$scope.login = function(username, password) {
UserSvc.login(username, password)
.then(function(response) {
$scope.$emit('login', response.data)
$location.path('/dashboard');
})
}
$scope.logout = function() {
UserSvc.logout();
$scope.$emit('logout')
}
});
app.controller('ApplicationCtrl', function($scope, UserSvc) {
angular.element(document).ready(function() {
$scope.currentUser = UserSvc.getUser();
})
$scope.modalShown = true;
$scope.$on('login', function (_, user){
$scope.currentUser = user;
})
$scope.$on('logout', function(){
$scope.currentUser = null;
})
});
если кто имеет какие-либо указатели, пожалуйста, дайте мне знать! Я провел так много времени, на это :(
'' '' '' '' '' '' ''' '' '' '' '' '' '' '' headers: {'X-Auth': this.token} 'это может быть опечатка на' this.token --- >>> svc.token', но это, вероятно, не решит всю проблему. Если вы используете [http-interceptor, как показано в этом репозитории] (https://github.com/witoldsz/angular-http-auth), вам будет меньше проблем. Что хорошего в этом пакете - это метод [loginConfirmed] (https://github.com/witoldsz/angular-http-auth/blob/master/src/http-auth-interceptor.js#L24), который позволяет вам преобразовать неудачные запросы, например, добавили заголовок/токен к ним, прежде чем запросы снова будут запущены. –