JWT 注册问题

JWT signup issue

我有一个问题,在我的注册页面上,响应显示该用户已经存在,但是继续转到主页,就好像创建了一个新登录一样。如果用户存在,我希望它返回登录页面。我尝试添加一个 if else 块,但没有用。我不确定我做错了什么。

  const onSubmitForm = async (e: any) => {
e.preventDefault();
try {
  const body = { email, password, name };
  const response = await fetch('http://localhost:5000/register', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(body),
  });

  const parseRes = await response.json();
  console.log(parseRes);
  localStorage.setItem('token', parseRes);
  // history.push('/home');
  props.setAuth(true);
} catch (error) {
  let errorMessage = 'Server error';
  if (error instanceof Error) {
    errorMessage = error.message;
  }
  console.error(errorMessage);
}
// eslint-disable-next-line no-lone-blocks
{
  toggleSignup();
}

};

如果您想根据服务器的响应有条件地转到某个页面,您是正确的,一个简单的方法是使用 if/else 语句。

这是一个简单的例子:

const onSubmitForm = async (e: any) => {
    e.preventDefault();
    try {
        const body = { email, password, name };
        const response = await fetch('http://localhost:5000/register', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(body),
        });

        const parseRes = await response.json();
        
        // In YOUR code, you don't check the value of parseRes so your code goes straight to history.push('/home').
        // You want to check the value of parseRes and conditionally go to a certain page based on the value
        if (parseRes === 'User already registered') {
            history.push('/login');
        }
        else {
            localStorage.setItem('token', parseRes);
            history.push('/home');
        }        
        
        props.setAuth(true);
    } catch (error) {
        let errorMessage = 'Server error';
        if (error instanceof Error) {
            errorMessage = error.message;
        }
        console.error(errorMessage);
    }
    // eslint-disable-next-line no-lone-blocks
    {
        toggleSignup();
    }
};

您当前的代码不检查 parseRes 的值,并且将始终执行 history.push('/home'),因为它是下一行。

附带说明一下,不建议检查值 'User already registered',我只是用它来让您了解该怎么做。通常您想要检查 HTTP 响应代码(即 200、400、401 等)或检查一些返回的 JSON 值。