Я пытаюсь защитить свои паруса js rest api с помощью паспорта http-пакета, но на данный момент я не могу понять, где ошибка в моем коде. Я использовал этот repo и этот tutorial, чтобы понять, как это должно работать. Моя проблема в том, что мой код всегда возвращает 401. Я действительно не знаю, где искать ошибку. Если вам нужна дополнительная информация о моем коде, просто комментируйте. BrunoПарус JS паспорт http 401
EDIT: я нашел источник проблемы (с помощью @Viktor). Я просто не понял, как работает аутентификация HTTP-Basic. Теперь проблема в том, как я могу отправить свои учетные данные и мои данные? Если я просто тестирую маршруты с помощью auth (...), они работают ... Но как я могу добавить данные? Или мне нужно сначала аутентифицировать меня и отправить данные во второй запрос?
passport.js
var passport = require('passport');
var BasicStrategy = require('passport-http').BasicStrategy;
var bcrypt = require('bcrypt');
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findOne({
id: id
}, function(err, user) {
done(err, user);
});
});
passport.use('user-authentication', new BasicStrategy(
function(mail, password, done) {
sails.log.error("hallo");
User.findOne({
mail: mail
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Incorrect email.'
});
}
// Make sure the password is correct
bcrypt.compare(password, user.password, function(err, isMatch) {
if (err) {
return done(err);
}
// Password did not match
if (!isMatch) {
return done(null, false, {
message: 'Invalid Password'
});
}
// Success
return done(null, user);
});
});
}
));
isAuthenticated.js
var passport = require("passport");
module.exports = function (req, res, ok) {
passport.authenticate("user-authentication", {
session: false
}, function (err, user, info) {
if (err || !user) {
res.set("WWW-Authenticate", "Basic realm=\"Restricted\"");
return res.send("You are not permitted to perform this action", 401);
}
req.session.user = user;
return ok(null, user);
})(req, res, ok);
};
policies.js
module.exports.policies = {
'*': true,
'UserController': {
update: 'isAuthenticated'
}
}
UserController.test.js
var request = require('supertest');
var async = require('async');
describe('UserController', function() {
describe('#new()', function() {
it('...', function (done) {
request(sails.hooks.http.app)
.post('/user/new')
.send({ own_number: '654122', password: 'test', mail: '[email protected]', device_id: '1234', numbers: [1234567] })
.expect(200)
.end(done);
});
});
describe('#update()', function(){
it('...', function (done) {
async.series([
function(callback){
request(sails.hooks.http.app)
.post('/contact/update')
.send({ number: 1234, mail: "[email protected]", password: "test" })
.expect(200)
.end(callback);
},
function(callback){
request(sails.hooks.http.app)
.post('/user/update')
.send({ numbers: [1234], mail: "[email protected]", password: "test" })
.expect(200)
.end(callback);
}
], done);
});
});
});
Попробуйте использовать "Basic" вместо пользователя-аутентификации –
Ok, но я думал, что я могу назвать различные стратегии – Bruno
https: // GitHub.com/jaredhanson/passport-http Я надеюсь, что это поможет вам –