【问题标题】:Passport JS no username was givenPassport JS 没有给出用户名
【发布时间】:2018-12-31 13:10:37
【问题描述】:

旁注:我已经检查了谷歌和堆栈溢出,但到目前为止我发现没有任何解决方案有效。请不要标记重复,除非您知道您找到的帖子是解决方案。似乎存在许多解决方案。

我正在尝试使用passport-localpassport-local-mongoose 创建身份验证服务。以下是我的文件,我的错误消息只是No username was given。没有其他描述性或帮助性的内容。

我只包含了每个文件的重要部分。我通过邮递员将请求发送到 /register 路由,使用 POST 请求和原始 JSON 格式,以“电子邮件”和“密码”为键

app.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);
});

user.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);

routes/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("/"); 
        });
    });
});

【问题讨论】:

    标签: node.js mongoose passport.js passport-local


    【解决方案1】:

    Passport local 需要一个 usernameField 名称,如果未提供,则抛出 [MissingUsernameError: No username was given]。

    如果您想要电子邮件或其他任何东西,那么您必须指定它。在此处检查实现 -Passport local mongoose: no username was given error

    【讨论】:

    • 谢谢,我不知道如何实现。我想保留我的app.use 处理路线的方式。当您导出护照并执行authRoutes(app, passport);之类的操作时,我知道该怎么做
    • 知道了,必须将usernameField : 'email' 添加到usershcema.plugin
    • 是的。没错。如果有帮助,请接受我的回答。谢谢。
    猜你喜欢
    • 2019-02-18
    • 2020-08-10
    • 2017-12-05
    • 2021-06-05
    • 2021-04-21
    • 2019-03-19
    • 2016-07-04
    • 2016-07-07
    • 2018-05-07
    相关资源
    最近更新 更多