- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
尽管我的所有控制台日志都在打印,但我收到了 401...
这是我的服务器代码:
var Datastore = require('nedb');
var db = new Datastore({
filename : 'datafile.db',
autoload : true
});
var restify = require('restify');
var passport = require('passport');
var LocalStrategy = require("passport-local").Strategy;
var sessions = require("client-sessions");
var morgan = require('morgan');
var server = restify.createServer();
server.use(sessions({cookieName : 'session', secret : 'mycoolsecret', duration : 5 * 24 * 60 * 60 * 1000}));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(passport.initialize());
server.use(passport.session());
server.use(morgan('dev'));
passport.serializeUser(function (user, done) {
console.log("serializeUser: " + JSON.stringify(user));
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
console.log("deserializeUser: " + id);
db.findOne({
_id : id
}, function (err, doc) {
if (doc) {
return done(null, doc); // TODO: remove pwd hash
}
});
});
var lookupUser = function (Username, Password, done) {
// TODO: check pwd hash
db.findOne({
Username : Username
}, function (err, doc) {
if (err) {
console.log(err);
}
console.log("doc: " + doc.Username);
if (doc) {
return done(null, doc);
} else {
console.log("no user found for: " + Username);
}
});
return done(null, false, {
error : 'Incorrect username or password.'
});
};
passport.use(new LocalStrategy({
usernameField : 'Username',
passwordField : 'Password',
session : true
}, lookupUser));
// TODO: check for collisions
// TODO: hash pwd with bycrypt
server.post('/api/signup', function (req, res) {
db.insert({
Username : req.body.Username,
Name : req.body.Name,
Password : req.body.Password,
Email : req.body.Email
}, function (err, newDoc) {
if (err)
res.json(500, {
msg : err
});
else
res.json({
msg : 'OK'
});
});
});
server.post('/api/login', passport.authenticate('local'), function (req, res) {
console.log('this is printing, but it still fails: ', req.user);
res.send(200, {msg : 'OK'});
});
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
这里是 package.json 中的依赖项:
"dependencies": {
"restify": "~2.8.4",
"passport": "^0.2.1",
"passport-local": "^1.0.0",
"client-sessions": "^0.7.0",
"nedb": "^1.1.1",
"morgan": "^1.5.1"
},
这是我的注册测试代码:
var restify = require('restify');
var assert = require('assert');
// init the test client
var client = restify.createJsonClient({
url: 'http://localhost:8080',
version: '*'
});
client.post('/api/signup', { Name: "John Smith", Email: "john@smith.com", Password: "pwd", Username: "john"},
function(err, req, res, data) {
if (err) {
throw new Error(err);
} else {
console.log(data.username);
client.close();
}
}
);
console.log("test_signup");
下面是触发 401 的测试代码:
var restify = require('restify');
var assert = require('assert');
// init the test client
var client = restify.createJsonClient({
url : 'http://localhost:8080',
version : '*'
});
client.post('/api/login', {
Password : "pwd",
Username : "john"
},
function (err, req, res, data) {
if (err) {
throw new Error(err);
} else {
console.log(data.Username);
client.close();
}
});
console.log("test_login");
这是服务器的输出:
POST /api/login 401 1.652 ms - - doc: john serializeUser:
{"Username":"john","Name":"John
Smith","Password":"pwd","Email":"john@smith.com","_id":"0drs1nALTwidhQMD"}
this is printing, but it still fails: { Username: 'john', Name:
'John Smith', Password: 'pwd', Email: 'john@smith.com', _id:
'0drs1nALTwidhQMD' }
最佳答案
找到了...
这段代码总是被执行:
return done(null, false, {
error : 'Incorrect username or password.'
});
将代码移动到 if (doc) 的 else 分支中可以解决问题。
关于node.js - 我从 Node.js、Restify 和 Passport 收到 401 Unauthorized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28000089/
我在一个节点 js 服务器上工作,并使用 bluebird 来实现 promise 。我了解如何使用 promise ,但我的问题是如何处理 promise 返回的错误。我尝试了简单的解决方案 - 只
我是开发 Web 服务的初学者,我有一个带有 node js 和模块 restify 的服务器,我想使用模块 OAuth2-restify 添加身份验证。但是当我努力准备获取 token 的请求时。我
我正在使用 REST 架构来创建在 Restifyjs 中创建的 Web 应用程序,其前端是在 Angular JS 中,两者都在不同的域上运行。例如,我的本地 Restify 正在 locahost
也在官方 Restify repo 中询问:#1224 你好, 是否有可能有一个默认格式化程序可以处理任何未定义的接受类型。 例如: restify.createServer({ format
我正在为 Node 使用 restify 来创建一个简单的 API。我想要一个目录 /public,人们可以在其中简单地浏览到该目录并下载他们浏览到的文件。 为了完成这个,我在/routes/publ
我正在尝试创建一个 REST API 服务器,它可以使用 node.js restify 接受图像上传。我在 http://restify.com/ 查看了文档但无法确定 restify 是否支持作为
我是 javascript 世界的新手,我正在尝试创建一个“基本”RESTful 应用程序。到目前为止,我发现 restify 框架似乎是完成此任务的最佳框架之一,因为 Express 也更倾向于处理
我想安装 restify在我的 Windows 机器上使用 npm。 出现错误,无法安装。 查看日志文件时出错 info dtrace-provider@0.2.8 Failed to exec in
我对 Restify 中客户端的目的感到困惑: http://mcavage.me/node-restify/#JsonClient 它们本身是基于 Node.js 构建的,就像服务器部分一样。我是否
来自 express ,我有这样的路线 server.get('/some/route/*', function(req, res) { // accessing wildcard c
我正在尝试使用 node.js restify 编写 Restful 应用程序。这是我的应用程序代码: var restify = require('restify'); var server = r
目前我使用 Node 模块 jwtRestify 进行身份验证。我有一个问题,我想从身份验证中排除一些路径,这没有问题: server.use(jwtRestify({ secret: config.
我熟悉 gulp 以及在单个配置文件中为每个环境进行不同配置的能力。这样运行 gulp dev 将允许您使用开发环境的配置启动服务器,gulp staging 用于暂存,gulp prod 来回生产。
我正在使用 restify .在 POST 上,它获取一个 JSON 对象并将值存储到数据库中。 现在我还需要上传图片。 场景是:上传图片,将其调整为指定尺寸(3 种类型的缩略图)并将它们全部保存在服
我有一个基于 Node 和 Restify 插件的用 JavaScript 编写的 REST 应用程序。 我设置了一些 REST 函数: var server = restify.createServ
我正在使用这里的restify-oauth2存储库: https://github.com/domenic/restify-oauth2 在自述文件中提到了 tokenExpirationTime 但
这就是当我尝试让 Facebook 为我的机器人验证我的 URL 时得到的结果。我知道这是一个数据类型问题。我发送回一个字符串而不是一个整数。我的代码如下所示: server.get("/webhoo
我懂了 TypeError: Cannot read property 'status' of undefined 当尝试使用 supertest 将文件上传到简单的 Restify 服务器时,并且打
我的以下代码不起作用: var server = restify.createServer( ... ); server .get('/', function(req,res,next){ res
我正在尝试使用以下代码通过 Restify 提供静态文件。 app.get(/.*/, restify.serveStatic({ directory: __dirname + '/publi
我是一名优秀的程序员,十分优秀!