[英]Why doesn't my custom callback in Passport JS work?
我試圖讓用戶能夠注冊我的網站,並將憑據存儲在mongodb上。
這是我的auth.js文件,其中定義了路由:
router.post('/signup', (req,res,next) => {
Passport.authenticate('local-signup', err => {
if (err) {
if (err.name === "MongoError" && err.code === 11000) {
res.status(409).json({
success: false,
message: "Unsuccessful",
errors: {
email: "This email is already taken."
}
});
}
res.status(400).json({
success: false,
message: "Unsuccessful",
errors: {
unknown: "Could not process for some reason. Contact admin."
}
});
}
res.status(200).json({
success: true,
message: "Successful",
errors: {}
});
}) (res, req, next);
}
最后一個括號有些混亂,但是請相信我,這不是語法錯誤。 這個代碼段是我定義護照策略的地方:
require ('../Models/Users')
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/onlinestore');
const User = mongoose.model('User');
const PassportLocalStrategy = require('passport-local').Strategy;
const Passport = require('passport');
module.exports = Passport.use(new PassportLocalStrategy({
usernameField: 'email',
passwordField: 'password',
session: false,
passReqToCallback: true,
}, (email, password, done) => {
let user = new User();
user.email = email.trim();
user.password = password.trim();
user.save(err => {
if (err) {
console.log(err);
return done(err);
} else {
console.log("Success");
return done(null);
}
});
}
));
該路由能夠獲取用戶輸入的密碼和用戶。 當我單擊提交時,實際上什么也沒有發生。 服務器沒有控制台,客戶端也沒有。 經過一番調試后,我認為問題是由於未調用Passport.Authenticate導致的,但我不確定為什么。 如果需要,我可以發布其他代碼段,謝謝!
這是OP。 我能夠找到解決方案。 1)在我的auth.js文件中,
Passport.authenticate('local-signup', err => {
將“ local-signup”替換為“ local”,因此它變為:
Passport.authenticate('local', err => {
2)我碰巧有多種Passport策略,每種策略都在各自的文件中(一種用於登錄,另一種用於注冊)。 要使用正確的“本地”,我必須在auth.js文件中導入正確的“本地”。 夠容易的
const passport = require('../Passport/local-signup');
對於登錄,它將是一個不同的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.