2016-09-24 67 views
0

我有一個快速的應用程序,我試圖添加護照本地貓鼬的用戶,但每當我嘗試創建一個用戶,我得到一個錯誤說MissingUsernameError: No username was given護照本地貓鼬錯誤:沒有用戶名被給出

下面是相關代碼:

用戶模式:

var mongoose = require('mongoose'); 
var passportLocalMongoose = require('passport-local-mongoose'); 

var UserSchema = new mongoose.Schema({ 
    username: String, 
    password: String, 
}); 

UserSchema.plugin(passportLocalMongoose); 

module.exports = mongoose.model("User", UserSchema); 

register.ejs:

<div class="field"> 
    <div class="two fields"> 
    <div class="field"> 
     <input type="text" name="email" value="<%= email %>"> 
    </div> 
    <div class="field"> 
     <input type="password" name="password" placeholder="password"> 
    </div> 
    </div> 
</div> 

app.js:

var mongoose  = require('mongoose'), 
passport   = require('passport'), 
LocalStrategy  = require('passport-local'), 
User    = require('./models/user'), 


app.use(require('express-session')({ 
    secret: 'very secret words', 
    resave: false, 
    saveUninitialized: false 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
passport.use(new LocalStrategy(User.authenticate())); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

//New user creation 
app.post('/newuser', function(req, res){ 
    var newUser = new User({username: req.body.email}); 
    console.log(newUser); 
    User.register(newUser, req.body.password, function(err, user){ 
    if(err){ 
     console.log('error registering user'); 
     console.log(err); 
     return res.send('oops'); 
    } 
    passport.authenticate('local')(req, res, function(){ 
     res.redirect('/matches'); 
    }); 
    }); 
}); 

任何人都可以看到我錯過了?謝謝! :)

回答

0

首先,所有路由

app.use(express.bodyParser());

你已經因爲passport.authenticate('local')檢查這些請求期間給喜歡usernamepassword這兩個領域在形式檢查後前務必給body-parser代碼價值觀,如果任何人不匹配,那麼它不會工作。

請參考Passport.js文檔瞭解更多詳情

http://passportjs.org/docs/username-password

更新

var User = require('./models/user'); 

// CHANGE: USE "createStrategy" INSTEAD OF "authenticate" 
passport.use(User.createStrategy()); 

passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

The reason for this functionality is that when using the usernameField option to specify an alternative usernameField name, for example "email" passport-local would still expect your frontend login form to contain an input field with name "username" instead of email . This can be configured for passport-local but this is double the work. So we got this shortcut implemented.

https://github.com/saintedlama/passport-local-mongoose

1

行,所以我找到了解決我的p如果有其他人在這裏遇到同樣的問題。

我在註冊表格中有enctype="multipart/form-data"。刪除它可以解決問題。我不明白爲什麼,所以如果任何人都可以闡明這一點,我會非常感激。

另外,我可以看到另一個問題在地平線上;我希望此表單不僅可以註冊用戶的用戶名和密碼,還可以向數據庫添加有關它們的信息,包括照片。據我所知,如果我想從表單上傳文件,我需要enctype="multipart/form-data"。有沒有人知道這個解決方案? (這應該是一個單獨的問題?)

+0

我沒有任何enctype = multipart/form-data和ahappens相同給我:( – Despertaweb

+1

如果你仍然有麻煩發佈一些代碼,我會看看如果 –

+0

我很好!剛剛解決了,現在thanx @Runny Yolk,我真的很感謝你的幫助:D 它調用了config.secrekey config.secret的instea,沒有犯下錯誤:S – Despertaweb