我使用passport尝试了nodejs登录教程。
deserializeUser在由c9.io托管时运行良好
但由openshift托管,它会出错
TypeError: hex is not a function
at Function.from (native)
at Function.from (native)
at new ObjectID (/opt/app-root/src/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:52:32)
at ObjectID (/opt/app-root/src/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:31:42)
at /opt/app-root/src/app.js:120:17
at pass (/opt/app-root/src/node_modules/passport/lib/authenticator.js:347:9)
at Authenticator.deserializeUser (/opt/app-root/src/node_modules/passport/lib/authenticator.js:352:5)
at SessionStrategy.authenticate (/opt/app-root/src/node_modules/passport/lib/strategies/session.js:53:28)
at attempt (/opt/app-root/src/node_modules/passport/lib/middleware/authenticate.js:348:16)
at authenticate (/opt/app-root/src/node_modules/passport/lib/middleware/authenticate.js:349:7)
at Layer.handle [as handle_request] (/opt/app-root/src/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/opt/app-root/src/node_modules/express/lib/router/index.js:312:13)
at /opt/app-root/src/node_modules/express/lib/router/index.js:280:7
at Function.process_params (/opt/app-root/src/node_modules/express/lib/router/index.js:330:12)
at next (/opt/app-root/src/node_modules/express/lib/router/index.js:271:10)
at initialize (/opt/app-root/src/node_modules/passport/lib/middleware/initialize.js:53:5)
我的deserializeUser代码如下所示
var express = require("express"),
app = express(),
cookieParser = require("cookie-parser"),
bodyParser = require('body-parser'),
assert = require('assert'),
fs = require("fs"),
XLSX = require("xlsx"),
session = require('express-session'),
MongoStore = require('connect-mongo')(session),
multer = require("multer"),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
mongodb = require('mongodb'),
ObjectId = require('mongodb').ObjectId;
passport.serializeUser(function(user, done) {
console.log("serialize:%s",user._id);
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
if (!db) {
initDb(function(err){});
}
if (db){
var col = db.collection("users");
col.findOne(ObjectId(id), function(err, user) {
console.log("deserialize:%s",user.username);
return done(err, user);
});
}
});
行(/opt/app-root/src/app.js:120:17)是
col.findOne(ObjectId(id), function(err, user) {
我认为函数ObjectId在openshift环境中不起作用
这只是一个bug吗?为什么在c9.io上工作而不在openshift上工作??
转载请注明出处:http://www.tiantaijiaoyu.com/article/20230526/1220845.html