Проблема: Satellizer не отправляет заголовок авторизации на сервер.Satellizer.Js не отправляет заголовок авторизации на сервер
Я пытаюсь использовать Satellizer.Js по проекту, над которым я работаю. Замечательно, однако, что это неправильная отправка заголовка авторизации в запросе на сервер (Примечание: я использую узел для бэкэнд). Это не проблема CORS, поскольку я работаю с localhost на данный момент. Когда я локально регистрирую/регистрирую, сервер отвечает токеном, а Satellizer правильно устанавливает это в локальном хранилище. Я проверяю вкладку «Сеть» в инструментах «dev», чтобы проверить заголовки, но не заголовок авторизации. Кто-нибудь имеет дело с этим, или есть идеи/советы, которые я могу использовать? Заранее спасибо.
Вот мой server.js код:
var express = require('express'),
app = express(),
path = require('path'),
cors = require('cors'),
bodyParser = require('body-parser'),
mongoose = require('mongoose'),
config = require('./config/config'),
morgan = require('morgan'),
port = process.env.PORT || 8080;
var express = require('express'),
app = express(),
path = require('path'),
cors = require('cors'),
bodyParser = require('body-parser'),
mongoose = require('mongoose'),
config = require('./config/config'),
morgan = require('morgan'),
port = process.env.PORT || 8080;
//connect to the database
mongoose.connect(config.db);
//morgan - log all requests to the console
app.use(morgan('dev'));
//middleware for body parser
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
//handle CORS requests
app.use(cors());
/*app.use(function(req,res,next){
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type, \ Authorization');
next();
});*/
//set the location for static files
app.use(express.static(__dirname + '/public'));
//API Routes
var apiRoutes = require('./app/routes/app-routes.js')(app,express);
app.use('/auth', apiRoutes);
//send the users to the front end
app.get('*', function(req,res){
res.sendFile(path.join(__dirname + '/public/app/views/index.html'));
});
//listen on port
app.listen(port, function(){
console.log('Listening on port: ' + port + "....");
});
Здесь, где лексем получает набор на угловой стороне с satellizer:
vm.login = function(){
$auth.login({email: vm.user.email, password: vm.user.password})
.then(function(res){
//check for token;
if(!res.data.token){
vm.error = true;
vm.errorMessage = res.data.message;
}else{
//redirect to the dashboard
$location.path('/dashboard');
}
})
.catch(function(){
vm.error = true;
vm.errorMessage = "Failed to login, please try again."
});
};
Здесь мой единственный аутентифицирован маршрут:
router.get('/dashboard', ensureAuthenticated, function(req,res){
//with a validated token
console.log(req.headers);
console.log(req.headers.authorization);
res.json({success: true, message:'You made it, congrats!'});
});
Это моя функция создания-token, и это мое промежуточное ПО для проверки подлинности:
function createToken(user){
var payload = {
exp: moment().add(14, 'days').unix,
iat: moment().unix(),
sub: user._id
}
return jwt.encode(payload,config.secret);
};
function ensureAuthenticated(req, res, next) {
if (!req.headers.authorization) {
return res.status(401).send({ message: 'Please make sure your request has an Authorization header' });
}
var token = req.headers.authorization.split(' ')[1];
var payload = null;
try {
payload = jwt.decode(token, config.secret);
}
catch (err) {
return res.status(401).send({ message: err.message });
}
if (payload.exp <= moment().unix()) {
return res.status(401).send({ message: 'Token has expired' });
}
req.user = payload.sub;
next();
}
Примечание: Satellizer.Js $ httpInterceptor отвечает за отправку токена в запросе. Вот этот код: установка
.factory('SatellizerInterceptor', [
'$q',
'SatellizerConfig',
'SatellizerStorage',
'SatellizerShared',
function($q, config, storage, shared) {
return {
request: function(request) {
if (request.skipAuthorization) {
return request;
}
if (shared.isAuthenticated() && config.httpInterceptor(request)) {
var tokenName = config.tokenPrefix ? config.tokenPrefix + '_' + config.tokenName : config.tokenName;
var token = storage.get(tokenName);
if (config.authHeader && config.authToken) {
token = config.authToken + ' ' + token;
}
request.headers[config.authHeader] = token;
}
return request;
},
responseError: function(response) {
return $q.reject(response);
}
};
}])
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('SatellizerInterceptor');
}]);
Опубликуйте свой код Angular и Node.js вместе с конфигурацией CORS. Это очень маловероятно, что Satellizer нарушен. – krl
@kyrylkov добавил мой код :) – elloM8
Так это сработало, когда и угловой код, и приложение Node.js, где на localhost? Развернуто ли развертывание удаленно, ваше Угловое приложение размещено в другом домене с сервера Node.js? – krl