SERVER.js
var express=require("express");
var app=express();
var bodyParser=require("body-parser");
var expressJWT=require("express-jwt");
var jwt=require("jsonwebtoken");
var morgan=require("morgan");
var methodOverride=require("method-override");
var passport=require("passport");
require("./config/database");
require("./config/passport");
app.use(passport.initialize());
app.use(morgan("dev"));
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use(bodyParser.json({type:"application/json"}));
app.use(methodOverride());
app.use(function(err,req,res,next){
if(err)
console.log(err);
next();
});
app.use(function(err,req,res,next){
res.setHeader("Access-Control-Allow-Origin","http://localhost:8080");
res.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS, PUT, PATCH, DELETE");
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
var routes=require("./config/routes");
routes(app,passport);
require("./config/passport")(passport);
app.listen(8080,function(err,connection){
console.log("App listening on port 8080");
});
节点控制器
var User=require("./../models/user");
var Token=require("./../shared/getToken");
var jwt=require("jwt-simple");
var config=require('./../../config/database');
module.exports={
signup:signup,
authenticate:authenticate,
memberinfo:memberinfo
};
function authenticate(req,res){
// if(err)
// console.log(err);
console.log("in authenticate",req.body);
if(!req.body.username || !req.body.password)
{
res.json({success: false,msg: 'Blank username or password '});
}
else
{
User.findOne({username: req.body.username},function(err,user)
{
if(err)
{
console.log('2');
throw err;
}
if(!user)
{
console.log('3');
return res.status(403).send({success: false,msg: 'Authentication failed.User not found'});
}
else
{
console.log('4');
user.comparePassword(req.body.password,function(err,isMatch)
{
if(isMatch && !err)
{
var token=jwt.encode(user,config.secret);
res.json({success: true,token: 'JWT '+token});
}
else
{
return res.status(403).send({success: false,msg: 'Authentication failed.Wrong Password'});
}
});
}
});
}
}
发出请求的 angularjs 控制器。
$scope.login=function(user){
console.log(user);
if(user.username && user.password){
var url=baseURL+"authenticate";
$http.post(url,user,{'Content-Type': 'application/x-www-form-urlencoded'}).then(function(response){
console.log(response.data);
if(response.status==200){
if(response.data.success && response.data.token && AuthService.login(response.data.token)){
$location.path("/app/dashboard");
}
}
},function(err){
console.log(err);
if(err.status==401)
MessageService.showMessage("User does not exist.");
if(err.status==404)
MessageService.showMessage("Error Occured.");
});
}else{
MessageService.showMessage("Please provide all fields.");
}
};
我正在尝试使用 Ionic Framework 和 MEAN Stack 创建一个简单的移动应用程序。但我从 3 天起就面临这个问题。我找不到解决方案。问题是:当我使用参数 {"username":"something","password":"something"} 请求身份验证时,身份验证函数中的 req.body 是 {}。正文解析器已在服务器中运行。但这在 POSTMAN 中工作正常,但在浏览器中无效。该怎么办 ?
1-您正在解析身体两次。您应该删除其中一个bodyParser.json
中间件。
2- 您应该在发送请求之前序列化数据(user=myuser&password=mypassword):
var seralize = function serialize (obj) {
return Object.keys(obj).map(function(key) {
return key + '=' + encodeURIComponent(obj[key]);
}).join('&');
}
$http.post(url, seralize(user), { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
使用jQuery.param
:
var data = $.param({
user: user.username,
password: user.password
});
$http.post(url, data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
$http.post(url, $httpParamSerializerJQLike(data), {headers: { 'Content-Type': 'application/x-www-form-urlencoded'} })
或者您可以$http
将您的数据序列化为 JSON,从而从您的请求中删除标头。默认情况下,该$http
服务将通过将数据序列化为 JSON,然后使用内容类型“application/json”发布它来转换传出请求:
$http({
method: 'POST',
url: url,
data: user
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句