在使用React / Redux进行身份验证时,为什么需要令牌?

时间:2018-02-05 16:53:51

标签: node.js reactjs react-redux passport.js

我正在构建一个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);
});

0 个答案:

没有答案