node.js - Passport JS 没有给出用户名
问题描述
旁注:我已经检查了谷歌和堆栈溢出,到目前为止我没有找到任何解决方案。请不要标记重复,除非您知道您找到的帖子是解决方案。似乎存在许多解决方案。
我正在尝试使用passport-local
and创建身份验证服务passport-local-mongoose
。下面是我的文件,我的错误信息只是No username was given
. 没有其他描述或帮助。
我只包含了每个文件的重要部分。我通过邮递员将请求发送到/register
路由,使用POST
请求和原始 JSON 格式,以“电子邮件”和“密码”为键
应用程序.js
var express = require('express');
var passport = require('passport');
var bodyParser = require('body-parser');
var LocalStrategy = require('passport-local');
// models
var User = require("./models/user");
// express setup
var app = express();
var indexRoutes = require("./routes/api/index");
// body parser setup
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
// setup useful variables for configuration
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + "/public"));
// passport setup
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
// Use routes
app.use("/", indexRoutes);
var server = app.listen(8080, function() {
console.log('Express server listening on port ' + server.address().port);
});
用户.js
const mongoose = require("mongoose");
const passportLocalMongoose = require("passport-local-mongoose");
const Schema = mongoose.Schema;
const UserSchema = new Schema({
email: String,
password: String,
avatar: String,
role: String
});
UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
路线/index.js
//handle sign up logic
router.post("/register", function(req, res){
var newUser = new User({email: req.body.email});
User.register(newUser, req.body.password, function(err, user){
if(err){
console.log("Error: " + err.message);
req.flash("error", err.message);
return res.redirect("back");
}
passport.authenticate("local")(req, res, function(){
req.flash("success", "Welcome to my site");
console.log('User has been created');
res.redirect("/");
});
});
});
解决方案
Passport local 需要一个 usernameField 名称,如果未提供,则抛出 [MissingUsernameError: No username was given]。
如果您想要电子邮件或其他任何东西,那么您必须指定它。在此处检查实现 - Passport local mongoose: no username was given 错误
推荐阅读
- vba - 如何格式化“.start”的时间部分以写入我的 Outlook 约会?我想使用表单用户的输入,这是我的
- vue.js - 使用 beforeEnter() 路由保护时缺少必需的道具
- algorithm - 用函数解析表达式
- visual-studio - 分析器的使用以及如何利用结果
- java - 本地 Google Cloud Appengine 未启动
- mysql - 在使用 NODEJS 在 Sequelize 中编写 SQL 查询时需要帮助
- python - 如何表示字符串中的任何整数值?
- android - 如何使用自定义对象绑定 MutableLiveData?
- r - 使用 rlang 将权重传递给 glm()
- python - 在python中创建一个'reset'方法来重置一个编辑过的字符串