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

标签 javascript node.js express passport.js sequelize.js

我正在使用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/

相关文章:

javascript - xmlHTTPrequest 不会打开 ("GET", url, true);我很生气! PHP

javascript - 初始图像未显示在 Amcharts 中的趋势线顶部

javascript - 在 php 中使用 javascript 的 HTML 似乎有冲突

javascript - THREE.js 相机遵循特定路径

node.js - React 中的重定向 - Node

JavaScript 堆栈 - Web 服务器和 API 服务器 : together or separate?

javascript - SvelteKit 开发服务器未启动

javascript - 使用 Graphql 查询的 Node 获取发布请求

node.js - 如何在expressjs中生成站点地图

javascript - 如何将github OAuth数据发送给客户端?