Passport LocalStrategy 从未调用过 Express
Passport LocalStrategy never called on Express
我在 LocalStrategy 回调中写了 console.log 但它从未调用过。我将 Sequelize 用于 ORM (MySQL)。
passport.js
const LocalStrategy = require('passport-local').Strategy
const passport = require('passport')
const bcrypt = require('bcrypt')
const UrunModel = require('../models/Urun')
console.log('File is Called') // If my require is wrong. But this log worked.
passport.use(new LocalStrategy({
usernameField: 'mail',
passwordField: 'pw1'
},
(username, password, done) => {
console.log('Worked!') // Never Called
UrunModel.findOne({
where : {
UrunName : 'testuser',
UrunDesc : '123456'
}
})
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
index.js
const session = require('express-session');
const bodyParser = require('body-parser')
const urlencoded = bodyParser.urlencoded({extended:false})
const passport = require('passport')
app.use(session({
secret: 'keyboardSecrIncKey',
resave: false,
saveUninitialized: true,
}))
app.use(passport.initialize())
app.use(passport.session())
require('./config/passport') //require my passport.js
app.post('/test',(req,res,next) => {
passport.authenticate('local',{
successRedirect: '/worked',
failureRedirect: '/notworked'
})(req,res,next)
})
它重定向我“/notworked”url。我看了 3 或 4 个视频,但我的代码几乎相同。
我哪里失败了?请解释我的错误。
默认情况下,LocalStrategy 希望在名为用户名和密码的参数中找到凭据。如果您的网站喜欢以不同的方式命名这些字段,可以使用选项来更改默认值。
你使用了mail
和pw1
参数,检查req.body
,因为req.body
正文中没有这个参数。
如果您更换
,您的问题将得到解决
{
usernameField: 'mail',
passwordField: 'pw1'
}
和
{
usernameField: 'username',
passwordField: 'password'
}
您也可以查看 documentation
已解决:
当有空字段(usernameField 和 passwordField)时不调用 LocalStrategy
我在 LocalStrategy 回调中写了 console.log 但它从未调用过。我将 Sequelize 用于 ORM (MySQL)。
passport.js
const LocalStrategy = require('passport-local').Strategy
const passport = require('passport')
const bcrypt = require('bcrypt')
const UrunModel = require('../models/Urun')
console.log('File is Called') // If my require is wrong. But this log worked.
passport.use(new LocalStrategy({
usernameField: 'mail',
passwordField: 'pw1'
},
(username, password, done) => {
console.log('Worked!') // Never Called
UrunModel.findOne({
where : {
UrunName : 'testuser',
UrunDesc : '123456'
}
})
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
index.js
const session = require('express-session');
const bodyParser = require('body-parser')
const urlencoded = bodyParser.urlencoded({extended:false})
const passport = require('passport')
app.use(session({
secret: 'keyboardSecrIncKey',
resave: false,
saveUninitialized: true,
}))
app.use(passport.initialize())
app.use(passport.session())
require('./config/passport') //require my passport.js
app.post('/test',(req,res,next) => {
passport.authenticate('local',{
successRedirect: '/worked',
failureRedirect: '/notworked'
})(req,res,next)
})
它重定向我“/notworked”url。我看了 3 或 4 个视频,但我的代码几乎相同。
我哪里失败了?请解释我的错误。
默认情况下,LocalStrategy 希望在名为用户名和密码的参数中找到凭据。如果您的网站喜欢以不同的方式命名这些字段,可以使用选项来更改默认值。
你使用了mail
和pw1
参数,检查req.body
,因为req.body
正文中没有这个参数。
如果您更换
,您的问题将得到解决{
usernameField: 'mail',
passwordField: 'pw1'
}
和
{
usernameField: 'username',
passwordField: 'password'
}
您也可以查看 documentation
已解决:
当有空字段(usernameField 和 passwordField)时不调用 LocalStrategy