簡體   English   中英

嘗試登錄到express和node.js內置的身份驗證系統時出現404錯誤(找不到文件)

[英]404 ERROR(file not found) when trying to log to an authentication system built in express and node.js

我正在制作一個演示銀行應用程序,該應用程序支持用戶注冊以及使用express.js和node.js登錄。 通過郵遞員調用時,內置的api接受對/signup/authenticate路由的POST請求,但在登錄表單中通過$.ajax調用時/authenticate路由給出404錯誤。

這是index.html中的jQuery ajax請求

$.ajax({
        url: '/authenticate',
        method: 'POST',
        data: cred,
        dataType: 'json',
        processData: false,
        contentType: false,
        success: function(success){
          console.log(success);
        },
        error: function(err){
          console.log(err);
        }
      })

server.js,這是服務器文件

app.use(express.static(__dirname + '/../public'));

app.get('/', function (req, res) {
    res.sendFile(path.join(__dirname + '/../public/index.html'));
});

app.use('/api', api(passport));

這是完成路由的app.js

'use strict';

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

var config = require('../config'),
    allowOnly = require('../services/routesHelper').allowOnly,
    AuthController = require('../controllers/authController'),
    UserController = require('../controllers/userController'),
    AdminController = require('../controllers/adminController');

var APIRoutes = function(passport) {
    // POST Routes.
    router.post('/signup', AuthController.signUp);
    router.post('/authenticate', AuthController.authenticateUser);

    // GET Routes.
    router.get('/profile', passport.authenticate('jwt', { session: false }), allowOnly(config.accessLevels.user, UserController.index));
    router.get('/admin', passport.authenticate('jwt', { session: false }), allowOnly(config.accessLevels.admin, AdminController.index));

    return router;
};

module.exports = APIRoutes;

/signup的POST請求有效,但/authenticate在使用Ajax時給出404錯誤。 但是/authenticate在使用Postman時可以按預期工作。

這是authController.js

var jwt = require('jsonwebtoken');

var config = require('../config'),
    db = require('../services/database'),
    User = require('../models/user');

// The authentication controller.
var AuthController = {};

// Register a user.
AuthController.signUp = function(req, res) {
    if(!req.body.username || !req.body.password) {
        res.json({ message: 'Please provide a username and a password.' });
    } else {
        db.sync().then(function() {
            var newUser = {
                username: req.body.username,
                password: req.body.password
            };

            return User.create(newUser).then(function() {
                res.status(201).json({ message: 'Account created!' });
            });
        }).catch(function(error) {
            console.log(error);
            res.status(403).json({ message: 'Username already exists!' });
        });
    }
}

// Authenticate a user.
AuthController.authenticateUser = function (req, res) {
  if (!req.body.username || !req.body.password) {
    res.status(404).json({
      message: 'Username and password are needed!'
    });
  } else {
    var username = req.body.username,
      password = req.body.password,
      potentialUser = {
        where: {
          username: username
        }
      };

    User.findOne(potentialUser).then(function (user) {
      if (!user) {
        res.status(404).json({
          message: 'Authentication failed!'
        });
      } else {
        user.comparePasswords(password, function (error, isMatch) {
          if (isMatch && !error) {
            var token = jwt.sign({
                username: user.username
              },
              config.keys.secret, {
                expiresIn: '30m'
              }
            );

            res.json({
              success: true,
              token: 'JWT ' + token,
              role: user.role
            });
          } else {
            console.log("Log err")
            res.status(404).json({
              message: 'Login failed!'
            });
          }
        });
      }
    }).catch(function (error) {
      res.status(500).json({
        message: 'There was an error!'
      });
    })
  }
}


module.exports = AuthController;

這是響應的日志。

POST / api /驗證404 5.092毫秒-47

執行(默認):SELECT idusernamepasswordrolecreatedAtupdatedAtusers AS user WHERE user username ='sipho'LIMIT 1;

POST / api / authenticate 200 519.020 ms-193

我已經嘗試了一切。 請幫忙,因為我是Node和Express的新手。

路徑與任何聲明都不匹配時,Express會自動響應404。 但就您而言,我認為這是正確的。 就您在多個地方返回404代碼而言,我檢查錯誤的方式是:

  • 確保使用日志記錄執行已在您的方法中輸入

  • 編寫不同的日志/控制台以了解將返回哪個404。 或者,您可以在每個地方返回不同的http代碼,以查找失敗的http代碼

  • 之后,您必須檢查為什么要進入該狀態並嘗試查找錯誤的根源。

例如。 如果返回的404是第一個,則可能是因為在ajax部分中您沒有發送用戶名或密碼。 如果是第二個,則可能是因為用戶名未注冊或未保存在數據庫中。

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM