password.js的实现。护照未认证

时间:2020-04-13 10:21:03

标签: javascript node.js passport.js

我正在尝试实现passport.js来为我的节点应用程序创建用户身份验证系统。我正在使用express作为Web应用程序框架,使用本地护照作为策略,并且正在尝试实现session.js。对于数据库管理,我的用户是waterline.js和sails-mysql适配器。

问题是,如果我提交表单,则似乎无法使用登录策略进行身份验证。我写了几个console.log()来查看错误是什么,但是什么都没有输出到控制台。

router.post仅执行failureRedirect。

相关的app.js代码:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session');
var bodyParser = require('body-parser');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// middleware use statements
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({
  extended: false
}));
app.use(cookieParser());
app.use(session({
  secret: "cats"
}));
app.use(require('flash')());
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(passport.initialize());
app.use(passport.session());

// use public files
app.use(express.static(path.join(__dirname, 'public')));

// (de)serialization of user
passport.serializeUser(function(user, done) {
  console.log('serializing user: ');
  console.log(user);
  done(null, user.user_id);
});

passport.deserializeUser(function(user_id, done) {
  app.models.user.findById(user_id, function(err, user) {
    console.log('deserializing user:', user);
    done(err, user);
  });
});

// passport Authentication strategie setup
passport.use('login', new LocalStrategy({
    passReqToCallback: true
  },
  function(username, password, done) {
    app.models.user.findOne({
      username: username
    }, function(err, user) {
      if (err) {
        console.log('error occurred: ' + err);
        return done(err);
      }
      if (!user) {
        console.log('user nog found');
        return done(null, false, {
          message: 'There is no account on this email address.'
        });
      }
      if (!user.validPassword(password)) {
        console.log('user found but incorrect password');
        return done(null, false, {
          message: 'incorrect password.'
        });
      }
      console.log('ingelogd!');
      return done(null, user);
    });
  }
));

// router (index.js) user statement
var indexRouter = require('./routes/index')(passport);
app.use('/', indexRouter);

相关的index.js代码(路由器):

var express = require('express');
var router = express.Router();

var archiveController = require('../controllers/archiveController');
var dashboardController = require('../controllers/dashboardController');
var homeController = require('../controllers/homeController');
var reglogController = require('../controllers/reglogController');
var userController = require('../controllers/userController');


module.exports = function(passport) {
    /// home routes ///
    // GET home page
    router.get('/', homeController.index);


    /// reglog routes ///
    // GET reglog page
    router.get('/reglog', reglogController.reglog_page);
    // login
    router.post('/reglog/login', passport.authenticate('login', {
      successRedirect: '/',
      failureRedirect: '/reglog',
      failureFlash: true
    }));
    // register
    router.post('/reglog/register', reglogController.reglog_register);

相关的html代码(使用哈巴狗):

            form(action="/reglog/login" method= 'post')
              label(class="mdc-text-field email-text-field mdc-text-field--outlined")
                input(type="text" class="mdc-text-field__input" aria-labelledby="email")
                div(class="mdc-notched-outline")
                  div(class="mdc-notched-outline__leading")
                  div(class="mdc-notched-outline__notch")
                    span(class="mdc-floating-label" id="my-label-id") e-mail address
                  div(class="mdc-notched-outline__trailing")
              label(class="mdc-text-field password-text-field mdc-text-field--outlined")
                input(type="password" class="mdc-text-field__input" aria-labelledby="password")
                div(class="mdc-notched-outline")
                  div(class="mdc-notched-outline__leading")
                  div(class="mdc-notched-outline__notch")
                    span(class="mdc-floating-label" id="my-label-id") password
                  div(class="mdc-notched-outline__trailing")
              button(class="mdc-button mdc-button--raised confirm-button" type='submit' value='Log In')
                div(class="mdc-button__ripple")
                i(class='material-icons mdc-button__icon' aria-hidden='true') check
                span(class="mdc-button__label") log in

我最初有一个像这样设置的控制器,但这可能不正确吗?然后,index.js路由器将router.post('/ reglog / login',reglogController.reglog_login)作为路由代码。

var user = require('../models/userModel');
var passport = require('passport');

exports.reglog_page = function(req, res) {
  res.render('reglogView', {
    title: 'reglog page'
  });
}

exports.reglog_login = passport.authenticate('login', {
  successRedirect: '/',
  failureRedirect: '/reglog',
  failureFlash: true
});

exports.reglog_register = function(req, res) {
  res.send('not yet impl');
}

我的文件结构如下:

   C:.
│   app.js
│   package-lock.json
│   package.json
│
├───bin
│       www
│
├───controllers
│       archiveController.js
│       dashboardController.js
│       homeController.js
│       reglogController.js
│       userController.js
│
├───models
│   │   datapointModel.js
│   │   simulationModel.js
│   │   userModel.js
│   │
│   └───config
│           config.js
│           index.js
│
├───public
│   ├───images
│   ├───javascripts
│   │       reglog.js
│   │
│   └───stylesheets
│       │   navbar.css
│       │   reglog.css
│       │   style.css
│       │
│       └───dist
│               bundle.css
│               bundle.js
│
├───routes
│       index.js
│
└───views
        archiveView.pug
        dashboardView.pug
        error.pug
        homeView.pug
        layout.pug
        reglogView.pug
        userView.pug

由于我只是刚刚开始对Web应用程序进行编程,所以我在代码中看不到错误。任何帮助表示赞赏。如果需要更多代码片段,我很乐意提供。

0 个答案:

没有答案
相关问题