我正在努力将Passport.js,Node&React组合在一起。
基本上,我正在尝试构建一个登录/注册系统。似乎很基本,但是我无法正常工作。
问题---> ,函数isAuthenticated()始终返回False。烦人,因为我想在React的componentDidMount()
中调用该函数来检查用户是否已经登录。
我的猜测是,我应该对端点/checkIfLoggedIn
使用'POST'请求并传递一些数据,但是什么数据呢?
我已经包含了登录系统的代码(有效),所以你们可以看到我如何管理用户登录。也许问题出在登录时,我忘记了在用户登录后要做什么?
这是我的代码:
Routes.js
app.post("/login", function(request, response) {
passport.authenticate("local-login", function(err, user, info) {
if (err) {
return console.log(err);
}
if (!user) {
return response.send(false);
}
request.logIn(user, function(err) {
if (err) {
return console.log(err);
}
request.session.cookie.maxAge = 1000 * 60 * 3;
request.session.cookie.expires = false;
return response.send(true);
});
})(request, response);
});
app.get('/checkIfLoggedIn', (req, res) => {
console.log(req.isAuthenticated())
});
反应(此处可能无关紧要,因为问题来自后端。此处提供一些上下文)
checkAuth () {
fetch('http://localhost:8080/checkIfLoggedIn')
.then(response => response.json())
.then(data => console.log(data));
}
login(username, password) {
fetch('http://localhost:8080/login', {
method: 'POST',
body: JSON.stringify({username: username, password: password}),
headers : {
'Content-Type': 'application/json',
'Accept': 'application/json, text/plain, */*',
}
}).then(res=>res.json())
.then(res => {
if (res === true) { // connection successfull
this.setState({
user_connected: true,
username: this.state.username,
modalVisible: false
})
} else {
message.info('Incorrect credentials');
}
}
);
}
Passport.js
passport.use(
'local-login',
new LocalStrategy({
usernameField : 'username',
passwordField: 'password',
passReqToCallback: true,
failureFlash: true,
badRequestMessage : 'Missing username or password.',
},
function(req, username, password, done){
connection.query("SELECT * FROM tbl_users WHERE username = ? ", [username],
function(err, rows){
if(err)
return done(err);
if(!rows.length){
return done(null, false, { logged: "NO" });
}
if(!bcrypt.compareSync(password, rows[0].password)) {
return done(null, false, { logged: "NO" });
}
return done(null, rows[0]);
});
})
)}
我可能不知道有什么可以使用户通过身份验证的,我真的不知道。
干杯!