사용자를 지원하는 데모 뱅킹 응용 프로그램을 만들고 express.js 및 node.js를 사용하여 로그인합니다. 빌드 된 api는 POSTman을 통해 호출 할 때 /signup
및 /authenticate
경로로 POST 요청을 수락하지만 로그인 양식에서 $.ajax
을 통해 호출하면 /authenticate
경로가 404 오류를 발생시킵니다.Express 및 node.js에 내장 된 인증 시스템에 로그인 할 때 404 오류 (파일을 찾을 수 없음)
이
$.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 인에게 index.html을에서 jQuery를 아약스 요청입니다
'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.jsvar 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 MS 인증 -
(47)의 실행 (기본값)
user
user
ASid
,username
,password
,role
,createdAt
,updatedAt
users
에서 선택하십시오.username
= 'sipho'LIMIT 1;POST/API/인증 (200) 519.020 밀리 - 193
나는 모든 것을 시도했다. 내가 노드와 익스프레스를 처음 사용하기 때문에 도와주세요.
대단히 감사합니다. 예상대로 메시지 객체가 아니라 404 오류를 반환하는 것 같습니다. 어디서나'console.log' 문을 뿌려야 만 문제의 근원을 추적 할 수있었습니다. 조언 주셔서 대단히 감사합니다. – hunkpapa