2
我有一個簡單的表單來註冊/驗證用戶。我能夠成功註冊用戶,但無法進行身份驗證。我試圖研究這個問題,但我還沒有找到任何可以提供幫助的東西。無法在nodeJS中驗證用戶:TypeError:無法使用'in'運算符在fs中搜索'用戶名'
這裏是HTML登錄表單:
<form method="post" action="/login">
<input type="text" name="username" placeholder="username">
<input type="password" name="password" placeholder="password">
<input type="submit" name="submit" value="submit">
</form>
當用戶按下submit
按鈕,下面顯示了我的控制檯上:
TypeError: Cannot use 'in' operator to search for 'username' in fs
at model.Document.$__buildDoc (/Users/userA/Desktop/loginapp/node_modules/mongoose/lib/document.js:207:39)
at model.Document (/Users/userA/Desktop/loginapp/node_modules/mongoose/lib/document.js:61:20)
at model.Model (/Users/userA/Desktop/loginapp/node_modules/mongoose/lib/model.js:45:12)
at new model (/Users/userA/Desktop/loginapp/node_modules/mongoose/lib/model.js:2957:11)
at Strategy.model [as _verify] (/Users/userA/Desktop/loginapp/node_modules/mongoose/lib/model.js:2956:14)
at Strategy.authenticate (/Users/userA/Desktop/loginapp/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/Users/userA/Desktop/loginapp/node_modules/passport/lib/middleware/authenticate.js:348:16)
at authenticate (/Users/userA/Desktop/loginapp/node_modules/passport/lib/middleware/authenticate.js:349:7)
at Layer.handle [as handle_request] (/Users/userA/Desktop/loginapp/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/userA/Desktop/loginapp/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/Users/userA/Desktop/loginapp/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/userA/Desktop/loginapp/node_modules/express/lib/router/layer.js:95:5)
at /Users/userA/Desktop/loginapp/node_modules/express/lib/router/index.js:277:22
at Function.process_params (/Users/userA/Desktop/loginapp/node_modules/express/lib/router/index.js:330:12)
at next (/Users/userA/Desktop/loginapp/node_modules/express/lib/router/index.js:271:10)
at SessionStrategy.strategy.pass (/Users/userA/Desktop/loginapp/node_modules/passport/lib/middleware/authenticate.js:325:9)
app.js:
var express = require('express');
var app = express();
var mongoose = require('mongoose');
var session = require('express-session');
var passport = require('passport');
var bodyParser = require('body-parser');
var User = require('./model/user.js');
var LocalStrategy = require('passport-local').Strategy;
var passportLocalMongoose = require('passport-local-mongoose');
var ejs = require('ejs');
var dbURL = 'mongodb://Admin:[email protected]:51655/yelpcamp';
mongoose.connect(dbURL, function(err) {
err ? console.log(err) : console.log('successfully connected to db!');
});
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended:true}));
app.use(session({
secret:"sfsdfsdfsd",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User, User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.post("/login", passport.authenticate("local", {
successRedirect: "/secret",
failureRedirect: "/login"
}), function(req,res) {
});
user.js:
var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose');
var userSchema = new mongoose.Schema({
username: String,
password: String,
email: String,
pictures: [{type:mongoose.Schema.Types.ObjectId, ref: "Pictures"}],
comments: [{type: mongoose.Schema.Types.ObjectId, ref: "Comments" }]
});
userSchema.plugin(passportLocalMongoose);
var User = mongoose.model("User", userSchema);
module.exports = User;
的package.json:
"dependencies": {
"body-parser": "^1.14.2",
"connect-mongo": "^1.1.0",
"ejs": "^2.4.1",
"express": "^4.13.4",
"express-session": "^1.13.0",
"mongoose": "^4.3.7",
"passport": "^0.3.2",
"passport-local": "^1.0.0",
"passport-local-mongoose": "^4.0.0"
}
UPDATE1:要解決這個問題,我試圖實例化用戶對象的用戶類(mongoose.Schema已更改爲新mongoose.Schema)。我也嘗試將策略屬性添加到LocalPassport
。 gnerkus指出了這些錯誤,但他們沒有解決這個問題,因爲我得到了同樣的錯誤。
謝謝你的答覆。我試過這段代碼,但同樣的問題依然存在。 – Frosty619
我發現瞭解決方案。請參閱最新的答案。 – gnerkus
我做了建議的更改(基本上是在添加新的mongoose.Schema之前添加了新的功能),但沒有奏效;同樣的問題仍然存在。 不過,謝謝你指出這個錯誤(: – Frosty619