【发布时间】:2022-01-25 13:51:41
【问题描述】:
我正在尝试使用护照和本地策略构建登录系统。但是,每当我尝试通过 axios 运行请求时,它都不起作用,而与邮递员一样,请求也起作用。
我收到“缺少凭据”作为 axios 错误。
这是我的 axios 请求:
//api.js
localAuth: (username, password) => {
console.log("running query")
axios({method: "POST", url: "http://localhost:8080/login", data: {username: username, password: password}, withCredentials: true
})
.then(res => {
console.log("Res = ", res);
})
.catch(err => {
if (!err.response) {
// network err
console.log('err: Network err');
} else {
console.log(err.response.data.message);
}
console.log(err);
})
}
这是我的本地策略:
//passport.js
var options = {
passReqToCallback: false,
usernameField: 'username',
passwordField: 'Password'
};
passport.use(new localStrategy(options, (username, password, done) => {
this.userHelper.isAuthenticated(username, password)
.then(async (response) => {
var user = {username: response.username, id: response.id};
var res = {user: user, token: this.getToken(user), type: type};
var token = await this.tokenHelper.saveToken(res)
return done(null, token)
})
.catch((err) => {
console.log("an error occured : ")
if (err === false) {
return done(null, false, {message: 'Invalid Username or password'})
}
else {
console.log("stratgy error:", err)
return done(err, false);
}
})
}))
这是我的服务器端请求:
//app.js
app.post('/login', (req, res, done) => {
strategy.authenticate('local',{session:true}, (err, user, info) => {
console.log("err = ", err, " user = ", user, " info = ", info)
if (err) {
console.log("error occuring in local authentification strategy")
res.send({sucess: false, message: err})
}
else if (!user) {
console.log("error occuring in local user")
res.send({sucess: false, message: "Unknown user or wrong Password"})
}
else {
console.log("sucess on authorization")
res.send({sucess: true, message: "Authorization suceeded"})
}
})(res, res);
})
strategy.authenticate的回调变量日志:err = null user = false info = { message: 'Missing credentials' }
最后是邮递员的结果:{"sucess":false,"message":"Unknown user or wrong Password"}
我已经设置了 usernameField 和 passwordField,因为我使用的是 express 6.x.x,所以我不需要初始化 bodyParser,因为它是通过 express 自动完成的。
你们知道我错过了什么吗?
【问题讨论】:
-
如果错误源是 axios,你能显示完整的错误和 HTTP 代码或堆栈跟踪吗?
-
不是真的,这不是一个错误,但问题是,当我做 passport.use(new localStrategy ...) 有一个 done 回调。这个回调让我得到关于它是否成功的信息以及一个可选的消息。问题是当我尝试进行身份验证时,我在我没有设置的信息值(检查 app.js)中得到“缺少凭据”,所以它是一个护照,我不明白为什么它被触发而不是那些我真的写了。
标签: javascript node.js express axios passport.js