gpt4 book ai didi

javascript - 基本的passport.js 注册功能失败,认为用户名已被占用

转载 作者:行者123 更新时间:2023-12-03 22:41:56 26 4
gpt4 key购买 nike

我正在使用passport.js 来获得为Node + Express + Sequelize 应用程序建立的基本注册功能。现在我有一个空的数据库,我只使用 Passport 本地策略从表单中获取用户的电子邮件和密码,对照数据库进行检查以确保电子邮件未与其他帐户相关联,然后一旦建立,创建用户。

以下是我的代码的相关部分:

./config/passport.js

const db = require('./sequelize');
const passport = require('passport'),
LocalStrategy = require('passport-local').Strategy;

passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(user, done) {
db.User.findById(id, function(err, user) {
done(err, user);
});
});

passport.use('local', new LocalStrategy({
emailField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(email, password, done){
process.nextTick(function() {
// find a user whose email is the same as the forms email
// we are checking to see if the user trying to login already exists
db.User.findOne({ email : email }, function(err, user) {
// if there are any errors, return the error
if (err)
return done(null, false, {message: err});
// check to see if there's already a user with that email
else if (user) {
return done(null, false, {message: 'User already exists'});
}
else {
return done(null, true, {message: 'User created'});
}
});
});
}
));

module.exports = passport;

应用程序.js
app.post('/signup', function(req, res, next){
const user = req.body;
passport.authenticate('local', function(err, user, info){
if (err){
res.send({success: false, message: 'authentication failed'});
}
if (!user) {
console.log(user);
res.send({message: "user already found"});
}

else{
db.User.create({
email: req.body.username,
password: req.body.password
});
console.log(info);
res.json({message: "user successfully signed up"});
}
})(req, res, next)
});

./配置/Sequelize
const path      = require('path');
const Sequelize = require('sequelize');
const _ = require('lodash');
const config = require('./config');
const db = {};

// create your instance of sequelize
const sequelize = new Sequelize(config.db.name, config.db.username, config.db.password, {
host: config.db.host,
port: config.db.port,
dialect: 'mysql',
storage: config.db.storage
});

//Instantiate the database

sequelize
.authenticate()
.then(function(err) {
console.log('Connection has been established successfully.');
}, function (err) {
console.log('Unable to connect to the database:', err);
});

/* this is where all of the MODELS will be defined for the time being */

const User = sequelize.define('User', {
username: Sequelize.STRING,
email: Sequelize.STRING,
password: Sequelize.STRING
});

sequelize.sync();

db.User = User;
db.Sequelize = Sequelize;
db.sequelize = sequelize;


module.exports = db;

但是,当我使用干净的数据库运行应用程序时,app.js 文件中的 !user 评估为 false,并且我无法注册新用户,因为该策略似乎认为已经有一个现有用户数据库中的那个电子邮件。我需要做什么来纠正这种情况?

最佳答案

db.User.findOne({ where: { email : email }})
.then(
function(user) {
if (user) {
return done(null, false, {message: 'User already exists'});
} else {
return done(null, true, {message: 'User created'});
);

关于javascript - 基本的passport.js 注册功能失败,认为用户名已被占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38547450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com