未定义的 jwt 令牌 react/express
2018-06-08
4633
我正在登录/注册系统上实现 JWT 身份验证。当登录/注册成功时,我会在 localStorage 中设置用户令牌。
问题是当我检查 localStorage 时,用户密钥存在,但值未定义。我认为问题可能出在我的 axios 帖子中或我的 express 文件中,但我无法弄清楚。
// my action creator
export function login(user, history) {
return async (dispatch) => {
axios.post('/api/login', { user })
.then(res => {
dispatch({ type: AUTHENTICATED });
localStorage.setItem('user', res.data.token);
history.push('/');
})
.catch((error) => {
dispatch({
type: AUTHENTICATION_ERROR,
payload: 'Invalid email or password'
});
});
};
}
数据正确到达我的 api。项目已设置,但值 res.data.token 未定义。下面是我的 express 文件
// login.js (/api/login)
router.post('/', function(req, res) {
var email = req.body.user.email;
var password = req.body.user.password;
// TODO: create db file and import connection
var connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "dbname",
port: 3307
});
connection.connect(function(err) {
if(err) {
console.log(err);
} else {
connection.query("SELECT ID, Password FROM Users WHERE Email = ?", [email], function(err, result) {
if(err) {
console.log('Could not find account');
res.send(err);
} else {
var id = result[0].ID;
bcrypt.compare(password, result[0].Password, function(err, result) {
if(result) {
console.log(id);
res.json({ id });
} else {
console.log('Incorrect password');
}
});
}
});
}
});
});
由于我的动作创建者中的 res.data.token 返回未定义,这是否意味着我的 express 文件(res.json([id]))中的响应只是返回已定义?
1个回答
您没有正确发送响应。
res.json([id]);
它只是发送
id 数组
。这就是
res.data.token
未定义的原因。因为
data
不包含对象。
发送正确的对象,例如:
res.json({id});
Farhan Tahir
2018-06-08