passport.authenticate обратный вызов не выполняется - PullRequest
0 голосов
/ 01 апреля 2019

Я создаю систему аутентификации для Node.js, используя локальную стратегию Passport.Я сохраняю все пользовательские данные в БД SQL Server Express, вместо обычной MongoDB, которую я вижу почти во всех примерах реализации Passport.До сих пор мне удалось создать работающий интерфейс регистрации пользователей, который сохраняет имя пользователя и хэш, а также имя и фамилию пользователя.Я немного сомневался в деталях, касающихся определения функции обратного вызова passport.authenticate, только чтобы обнаружить, что она даже не запускалась (текст обратного вызова Passport.authenticate был запущен. Никогда не регистрировался на консоли)!Я обязательно установил паспорт.passport-local, express и express-session с npm.Что мне не хватает?(код ниже) Большое спасибо

Точка входа в узел ("app.js"):

// Import dependencies:
const express = require('express')
const fs = require('fs')
const sql = require('mssql')
const bcrypt = require('bcrypt')
const passport = require('passport')
const session = require('express-session')
const LocalStrategy = require('passport-local').Strategy
// Get port fron environment variables. If not found, default to http standard value:
const port = process.env.PORT || 80

// Create Express app:
const app = new express()

// Express body parser
app.use(express.urlencoded({
  extended: true
}))

// Express session
app.use(
  session({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
  })
)

// Passport middleware
app.use(passport.initialize())
app.use(passport.session())

passport.use(
  new LocalStrategy({
    usernameField: 'userName'
  }, (username, password, done) => {
    console.log('Passport.authenticate callback was launched.')
    var getUserPassword = require('./api/getUserPassword')
    getUserPassword({
      username: username
    }, (queryOutput) => {
      if (err) {
        console.log(err)
        return done(err, false)
      }
      // Match user
      console.log('Query output: ' + queryOutput)
      if (!queryOutput[0].Password) {
        return done(null, false)
      }
      // Match password
      bcrypt.compare(password, queryOutput[0].Password, (err, isMatch) => {
        if (err) throw err
        if (isMatch) {
          return done(null, {
            user: userName,
            password: queryOutput[0].Password
          })
        } else {
          return done(null, false)
        }
      })
    })
  })
)
passport.serializeUser(function (user, done) {
  console.log("User id: " + user.id)
  done(null, user.id)
})
passport.deserializeUser(function (id, done) {
  done(err, user)
})

// Define static files directory:
app.use('/interfaces', express.static('public'))


app.post('/login', (req, res, next) => {
  console.log("req.user = " + req.user)
  passport.authenticate('local')(req, res, next)
})

// Check if authenticated:
app.get('*', (req, res, next) => {
  if (!req.isAuthenticated()) {
    res.redirect('/interfaces/Login/index.html')
  } 
    return next()
  }
})

app.post('*', (req, res) => {
  console.log("Received post request for path: " + req.path)
  console.log("Request body: " + JSON.stringify(req.body))
  if (req.path.startsWith("/api")) {
    if (!req.isAuthenticated() && req.path != '/login') {
      console.log("Attempt to call web service without previous authentication detected.")
      res.send('{OUT_Result:"failure"}')
      return
    }
    var apiFunction = require("." + req.path)
    apiFunction(req.body, (OUT_Result) => {
      console.log("OUT_Result = " + OUT_Result)
      res.send(OUT_Result)
    })
  }
})

// Launch server:
app.listen(port, () => {
  console.log('Listening on port ' + port)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...