我试图在护照Http包的帮助下保护我的风帆js rest api但是目前我无法弄清楚我的代码中的错误在哪里.
我用这个 repo和这个 tutorial来了解它应该如何工作.我的问题是我的代码总是返回401.
我真的不知道在哪里寻找错误.如果您需要有关我的代码的更多信息,请发表评论
布鲁诺
我用这个 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 },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,isMatch) { if (err) { return done(err); } // Password did not match if (!isMatch) { return done(null,{ 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,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,password: "test" }) .expect(200) .end(callback); },function(callback){ request(sails.hooks.http.app) .post('/user/update') .auth('test@test.com','test') .send({ numbers: [1234],password: "test" }) .expect(200) .end(callback); } ],done); }); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。