简体   繁体   English

Express 服务器对使用护照的身份验证没有响应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM