我正在构建一个MERN(Mongo,Express,React / Redux,Node)Web应用程序,我正在使用passport.js在服务器上实现身份验证。
我继续读到服务器需要向客户端发送令牌。
然而,当使用React / Redux时,我没有看到这一点。这是我实现它的方式: 1.用户点击在注册表上提交 2.数据传递给后端 3.后端处理带护照的身份验证 4.如果没有错误,服务器将用户对象发送回客户端。如果出错,服务器会向客户端发送错误消息。 5.如果没有错误,客户端将用户对象存储在redux状态(和本地存储)中 - 所以现在我们知道该用户已经过身份验证。 6.当用户想要执行任何需要进行身份验证的操作时,应用程序会检查redux状态和本地存储,以查看用户是否已通过身份验证。 7.当用户注销时,更改redux状态 - 例如没有经过身份验证的用户,并从本地存储中删除用户对象。
为什么我需要一个令牌?我缺少一个概念吗?
我不确定这里是否需要代码,但这里有一些代码:
前端:Actions.js
export const registerUser = formData => dispatch => {
console.log("In action Register User");
console.log("Here is the formData: ", formData);
dispatch(registerRequest()); // Set Loading to true
axios
.post('http://localhost:3001/register', formData)
.then(response => {
// save user to local storage here
dispatch(registerSuccess(response.data)); // response.data is user
})
.catch(err => {
dispatch(registerFail(err));
});
};
前端:Auth_Reducer.js
const reducer = (state = initialState, action) => {
switch (action.type) {
case actionTypes.REGISTER_REQUEST:
return updateObject(state, { loading: true });
case actionTypes.REGISTER_SUCCESS:
return updateObject(state, {
loading: false,
auth_error: '',
auth_user: action.user
});
case actionTypes.REGISTER_FAIL:
console.log('Register fail');
return updateObject(state, {
loading: false,
auth_user: null,
auth_error: action.error
});
default:
return state;
}
};
后端:Auth.js路线
router.post('/register', function(req, res, next) {
passport.authenticate('local-register', function(err, user, info) {
if (err) {
res.status(500).send(err);
} else if (info) {
res.status(400).json(info);
} else {
req.logIn(user, function(err) {
if (err) {
res.status(500).json(err);
} else {
res.json(req.user);
}
});
}
})(req, res, next);
});