护照身份验证和重定向有问题

时间:2021-05-01 09:18:49

标签: javascript node.js authentication

我尝试了所有可能的东西,但肯定有一些我无法识别的东西

index.js

const express = require('express');
const router = express.Router();
const { ensureAuthenticated } = require('../config/auth');

// Home Page
router.get('/', (req, res) => {
    res.render('home');
});

//DashBoard
router.get('/dashboard', ensureAuthenticated, (req, res) => {
    res.render('dashboard');
})

module.exports = router;

auth.js

module.exports = {
    ensureAuthenticated: function(req, res, next) {
        if (req.isAuthenticated()) {
            return next();
        }
        req.flash('error_msg', 'Please login first');
        res.redirect('/users/login');
    }
}

users.js

enter code here
const express = require('express');
const router = express.Router();
const User = require('../models/User');
const bcrypt = require('bcryptjs');
const ejs = require('ejs');
const passport = require('passport');

// Login Page
router.get('/login', (req, res) => {
    res.render('login');
})

//Register Page
router.get('/register', async(req, res) => {
    res.render('register');
})

// Register Handle
router.post('/register', (req, res) => {
    const { username, password } = req.body;
    let errors = [];

    // Check required fields
    if (!username && !password) {
        errors.push({ msg: "Please fill all fields" })
    }

    // Check password length
    if (password.length < 6 && password > 0) {
        errors.push({ msg: "Password should be atleat 6 characters"   
    })
    }

    if (errors.length > 0) {
        res.render('register', {
            errors,
            username,
            password
        }, console.log(errors));
    } else {
        // Validation passed
        User.findOne({ username: username })
            .then(async user => {
                if (user) {
                    //User exists
                    errors.push({ msg: "username has already taken" 
                       });
                    res.render('register', {
                        errors,
                        username,
                        password
                    });
                } else {

                    const salt = await bcrypt.genSalt(10);
                    const hashedPassword = await 
                                 bcrypt.hash(password, salt);


                    const newUser = new User({
                        username: username,
                        password: hashedPassword,
                    });
                    newUser.save()
                        .then(user => {
                            // res.status(201).json(user);
                            req.flash('success_msg', 'You are now 
                                                      registered')
                            res.redirect('/users/login');
                        })
                        .catch(err => console.log(err));
                }
                        })
            .catch(err => {
                console.log(err);
            })
      }
});

   // Login Handle
router.post('/login',
    passport.authenticate('local', {
        successRedirect: '/dashboard',
        failureRedirect: '/users/login',
        failureFlash: true
    })
);

// Logout Handle
router.get('/logout', (req, res) => {
    req.logout();
    req.flash('success_msg', 'You are logged out');
    res.redirect('/users/login');
})


module.exports = router;

所以这些是一些有效的代码,没有给出任何错误,除了登录后它不会在删除时将我呈现到仪表板
来自 router.get('/dashboard') 的“ensureAuthenticated”它可以工作,但是当它工作时,注销句柄不起作用。

0 个答案:

没有答案