gpt4 book ai didi

javascript - Passport.js 注册似乎有效,但用户凭据未插入数据库

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

使用 Scotch.ioofficial passport docs 作为引用,我正在实现一个 Node/Express/Sequelize 应用程序,其中我有一个包含电子邮件和密码字段的基本注册表单:

./views/signup.ejs

<form action="/signup" method="post">
<div class="form-group">
<label>Email</label>
<input type="text" class="form-control" name="email">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" name="password">
</div>

<button type="submit" class="btn btn-warning btn-lg">Signup</button>
</form>

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 theres already a user with that email
if (user) {
return done(null, false, {message: 'User already exists'});
}

else {
// if there is no user with that email
// create the user
db.User.create({
email: email,
password: password
});
return done(null, false, {message: 'User created'});
}
});
});
}
));

module.exports = passport;

最后,路线在

应用程序.js
const express = require('express');
const http = require('http');
const https = require('https');
const sequelize = require('sequelize');
const db = require('./config/sequelize');
const querystring = require('querystring');
const config = require('./config/config');
const passport = require('./config/passport');
const bodyParser = require( 'body-parser' );

const env = 'development';

const app = express();

const port = 3000;

app.use( bodyParser.urlencoded({ extended: true }) );
app.use(passport.initialize());
app.use(passport.session());

app.set('view engine', 'ejs');

app.listen(port);

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'});
}
else{
console.log(info);
res.json({message: "success"});
}
})(req, res, next)
});

如果本地策略有效,我希望发生的事情是 res.json({message: "success"}) 出现在浏览器上,并且根据 ./config/passport.js 的规范更新数据库。 {message: "success"} 出现在屏幕上,但数据库没有更新,这让我相信我在 ./config/passport.js 中的实现有问题。在 app.js 中,console.log(info) 语句在 cmd 上显示以下消息:
Executing (default): SELECT `id`, `username`, `email`, `password`, `createdAt`, 
`updatedAt` FROM `Users` AS `User` LIMIT 1;

这使得插入看起来可能正在进行,但对 db 的检查显示并非如此。我之前已经对 CRUD 更新进行了完整性检查,以确认 Sequelize 的基本实现有效,并将根据要求提供表的架构。我还能如何调试这种情况?

最佳答案

阅读有关如何在 sequelize 中进行查询的信息
http://docs.sequelizejs.com/en/latest/docs/querying/
你应该使用 promise ,像这样:

db.User.findOne({ where: {email : email }})
.then(function(user){
//do smth;
})
.catch(function(error){
console.log(error);
});

关于javascript - Passport.js 注册似乎有效,但用户凭据未插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546835/

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