Passport.js Тайм-аут перенаправления аутентификации - PullRequest
0 голосов
/ 06 февраля 2019

Я потратил два дня на поиски ответа на этот вопрос, но безрезультатно.

Когда я пытаюсь зарегистрировать пользователя, перенаправление не выполняется.Он создает пользователя в базе данных, но не будет перенаправлять на домашнюю страницу.В конце концов, он отключается и выдает эту ошибку A user with the given username is already registered, даже если это совершенно новый пользователь.Кажется, он создает пользователя, а затем пытается снова.

Я использовал тот же код (ниже) в другом веб-приложении без проблем.Любая помощь очень ценится.

App.js

require('dotenv').config()

const express = require('express')
const app = express()
const bodyParser = require('body-parser')
const mongoose = require('mongoose')
const morgan = require('morgan')
const passport = require('passport')
const flash = require('connect-flash')
const LocalStrategy = require('passport-local').Strategy
const methodOverride = require('method-override')

//Require Models
const User = require('./models/user')

//Require Routes
const indexRoutes = require('./routes/index')
const membersRoutes = require('./routes/members')

mongoose.connect(process.env.MONGODB_URL, {useNewUrlParser: true})

//Console log
app.use(morgan('dev'))

//Configure Body Parser
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())

app.set('view engine', 'ejs')
app.use(express.static(__dirname + '/public'))
app.use(methodOverride('_method'))
app.use(flash())

//Add time stamp to post, comments, and contributions.
app.locals.moment = require('moment')

//Allow browser access.
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization')
  if (req.method === 'OPTIONS') {
    res.header('Access-Control-Allow-Methods', 'GET, POST, PATCH, DELETE, PUT')
  }
  next()
})

//Passport Config
app.use(require('express-session')({
  secret: 'string that I will not show',
  resave: false,
  saveUninitialized: false
}))

app.use(passport.initialize())
app.use(passport.session())
passport.use(new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  User.authenticate))
passport.serializeUser(User.serializeUser())
passport.deserializeUser(User.deserializeUser())

app.use((req, res, next) => {
  res.locals.currentUser = req.user
  res.locals.error = req.flash('error')
  res.locals.success = req.flash('success')
  next()
})

//Use Routes
app.use(indexRoutes)
app.use(membersRoutes)

module.exports = app

Member.js

const express = require('express')
const router = express.Router()
const passport = require('passport')
const User = require('../models/user')

//Register Routes
router.get('/register', (req, res, next) => {
  res.render('register', { page: 'register'})
})

router.post('/register', (req, res, next) => {
  var newUser = new User(req.body.user)
  newUser.email = req.body.email
  if (req.body.password !== req.body.confirmPassword) {
    req.flash('error', 'Passwords do not match. Please, try again.')
    return res.redirect('/register')
  } else {
    User.register(newUser, req.body.password, (err, user) => {
      if (err) {
        console.log(err)
        return res.render('register', { 'error': err.message })
      }
        passport.authenticate('local')(req, res, () => {
          req.flash('success', 'Welcome to ALUPC, ' + user.firstName + ' ' + user.lastName + '!')
          res.redirect('/')
      })
    }) 
  }
})

//Login Routes
router.get('/login', (req, res, next) => {
  res.render('login', {page: 'login'})
})

router.post('/login', passport.authenticate('local',
  {
    successRedirect: '/',
    failureRedirect: '/login'
  }), function (req, res) {
  })

//Logout Routes
router.get('/logout', function (req, res) {
  req.logout();
  res.redirect('/');
})

//Member Page Routes

module.exports = router

Модель пользователя

const mongoose = require('mongoose')
const passLocMon = require('passport-local-mongoose')

const userSchema = mongoose.Schema({
  email: {type: String, unique: true, required: true},
  password: String,
  firstName: {type: String, required: true},
  lastName: {type: String, required: true},
})

userSchema.plugin(passLocMon, {
  usernameField: 'email', 
  passwordField: 'password'
})

module.exports = mongoose.model('User', userSchema)

1 Ответ

0 голосов
/ 08 февраля 2019

Я нашел это !!Оказывается, при поиске ответа на предыдущую ошибку я удалил набор скобок в следующем разделе кода ...

passport.use(new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  User.authenticate))

Я забыл добавить обратно скобки, используемые для вызова User.authenticate ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...