[英]Express server Not responding on Authentication with passport
I have my express server in Node app with OAuth using passport.我在 Node 应用程序中有我的快递服务器,OAuth 使用护照。 There is no issue in registration and even with wrong credentials.But when I try to login with correct credentials the server not all responding.My url keeps on loading.注册没有问题,即使凭据错误。但是当我尝试使用正确的凭据登录时,服务器并没有全部响应。我的 url 继续加载。
Even there is no error in console.即使控制台没有错误。
My passport local strategy code:我的护照本地策略代码:
const MyStrategy = require('passport-local').Strategy
const bcrypt = require('bcrypt')
const mongoose = require('mongoose')
//User model
const User = require('./models/user')
function initialize(passport) {
const authUser = (email,password,done) =>{
User.findOne({ email : email })
.then(user =>{
if (!user) {
return done(null,false,{message: "User doesn't Exists"})
}
bcrypt.compare(password,user.password,(err,found)=>{
if (err) {
throw err
}
if (found) {
return done(null,user)
} else {
return done(null,false,{message : "Incorrect Credentials"})
}
})
})
.catch(err=>{
throw err
})
}
passport.use(new MyStrategy({ usernameField: 'email' },authUser))
passport.serializeUser((user,done) => { })
passport.deserializeUser((id,done) => { })
}
module.exports = initialize
App.js应用程序.js
const express = require("express");
const app = express();
const mongoose = require('mongoose')
require('dotenv').config()
const bodyParser = require("body-parser");
const ejs = require("ejs");
const passport = require('passport')
const flash = require("express-flash")
const session = require("express-session")
//DB connection
const mongo_uri = process.env.MONGODB_URI || "mongodb://localhost/testDB";
mongoose.connect(mongo_uri, {useNewUrlParser: true , useUnifiedTopology: true});
mongoose.connection.once('open', () => console.log("Connected"))
.on('npm ierror' , ()=> { console.log('Error') })
const Users = require('./models/user');
//OAuth
const UserAuth = require('./user_auth')
UserAuth(passport)
//Body Parser
app.use(express.urlencoded({extended: false}));
app.use(express.json());
//ejs
app.set('view engine', 'ejs');
app.use(express.static("public"));
//Session
app.use(session({
secret:process.env.SECRET||'secret',
saveUninitialized:false,
resave:false
}))
app.use(passport.initialize())
app.use(passport.session())
//Flash
app.use(flash())
//Routes
const regisrouter= require('./routes/register')
const indexrouter= require('./routes/index')
const homeRouter = require('./routes/home')
const composeRouter = require('./routes/compose')
const postRouter = require('./routes/post');
app.use('/',regisrouter);
app.use(indexrouter);
app.use(homeRouter);
app.use(composeRouter);
app.use('/posts',postRouter);
app.listen(3000, function() {
console.log("Server started on port 3000");
});
Login route page:登录路由页面:
const express = require('express');
const router = express.Router()
const passport = require('passport')
router.post("/login", passport.authenticate('local',{
successRedirect: '/',
failureRedirect: '/login',
failureFlash : true
}));
router.get("/login",(req,res) =>{
res.render('index')
})
module.exports = router
I've been debugging this for 3 days but noting is improved.我已经调试了 3 天,但注意到改进了。 I guess there may be problem with async function but couldn't find anything我猜异步 function 可能有问题,但找不到任何东西
It looks like passport.serializeUser() and passport.deserializeUser() functions need to be updated... here is a great post on serialize and deserialize .看起来 passport.serializeUser() 和 passport.deserializeUser() 函数需要更新...... 这是关于序列化和反序列化的好帖子。
// used to serialize the user for the session
passport.serializeUser(function(user, done) {
done(null, user.id);
});
// used to deserialize the user
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Also, make sure the passport-setup where you initialize the local-strategy is imported into App.js.此外,请确保将初始化本地策略的护照设置导入 App.js。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.