javascript – Sails JS护照http 401
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Sails JS护照http 401,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3670字,纯文字阅读大概需要6分钟。
内容图文
![javascript – Sails JS护照http 401](/upload/InfoBanner/zyjiaocheng/767/ab97910362b44e65ae11befe919ca18a.jpg)
我试图在护照http包的帮助下保护我的风帆js rest api但是目前我无法弄清楚我的代码中的错误在哪里.
我用这个repo和这个tutorial来了解它应该如何工作.我的问题是我的代码总是返回401.
我真的不知道在哪里寻找错误.如果您需要有关我的代码的更多信息,请发表评论
布鲁诺
编辑:
我找到了问题的根源(在@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: 'test@test.com', 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: "test@test.com", password: "test" })
.expect(200)
.end(callback);
},
function(callback){
request(sails.hooks.http.app)
.post('/user/update')
.send({ numbers: [1234], mail: "tet@test.com", password: "test" })
.expect(200)
.end(callback);
}
], done);
});
});
});
解决方法:
适合我 – 一旦数据库中有有效用户,我就能够进行身份验证以及访问和管理用户数据.使用空的用户数据库,当然会得到401,因为这些策略不允许您创建第一个进行身份验证的用户.暂时禁用config / policies.js中的UserController策略,您可以创建第一个用户.
假设您在数据库中至少有一个有效用户,那么让我们缩小问题范围.您从isAuthenticated.js中记录错误和用户获得了什么输出?如果你得到null和false,在passport.js的不同步骤中会发生什么 – 你是否能够通过数据库中的电子邮件地址找到用户并且密码是否匹配?
您是否有自定义路由和控制器操作,或者您是否使用蓝图?
编辑:您的更新测试将使用HTTP基本身份验证:
describe('#update()', function(){
it('...', function (done) {
async.series([
function(callback){
request(sails.hooks.http.app)
.post('/contact/update')
.auth('test@test.com', 'test')
.send({ number: 1234, mail: "test@test.com", password: "test" })
.expect(200)
.end(callback);
},
function(callback){
request(sails.hooks.http.app)
.post('/user/update')
.auth('test@test.com', 'test')
.send({ numbers: [1234], mail: "tet@test.com", password: "test" })
.expect(200)
.end(callback);
}
], done);
});
});
内容总结
以上是互联网集市为您收集整理的javascript – Sails JS护照http 401全部内容,希望文章能够帮你解决javascript – Sails JS护照http 401所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。