You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置登录按钮:验证通过后跳转至指定URL而非原地渲染组件

解决方案

1. 引入React Router导航工具

首先确认项目已安装并配置React Router DOM,在auth.js中导入useNavigate钩子:

import { useNavigate } from 'react-router-dom';

2. 修改登录逻辑,添加跳转代码

在Auth组件内初始化导航实例,登录成功后调用navigate('/posts')跳转,同时移除原本在Auth组件内渲染Home的逻辑(Auth只负责登录页面):

const Auth = () => {
  const { Userr } = useContext(Gloabaldata);
  const navigate = useNavigate(); // 初始化导航钩子

  const login = async (e) => {
    e.preventDefault();
    signInWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        const user = userCredential.user;
        // 登录成功后跳转到/posts路径
        navigate('/posts');
      })
      .catch((error) => {
        // 可在此添加错误提示,比如 alert(error.message)
      });
  };

  return (
    <>
      <form>
        <input
          type="email"
          placeholder="Email Address"
          onChange={(event) => {
            setregisterEmail(event.target.value);
          }}
        />

        <input
          type="password"
          placeholder="Password"
          autoComplete="on"
          onChange={(event) => {
            setregisterPassword(event.target.value);
          }}
        />
        <button onClick={login} className="sign-in">
          SIGN IN
        </button>
        <button className="switchmode">
          <h3>dont have a ACCOUNT ? SIGN UP</h3>
        </button>
      </form>
    </>
  );
};

export default Auth;

3. 配置路由规则

在路由配置文件(如App.js或Routes.js)中,设置/posts路径对应Home组件,同时添加路由保护确保只有登录用户能访问:

import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
import Auth from './auth';
import Home from './Home';
import { useContext } from 'react';
import { Gloabaldata } from './context';

// 路由保护组件
const ProtectedRoute = ({ children }) => {
  const { Userr } = useContext(Gloabaldata);
  return Userr ? children : <Navigate to="/auth" />;
};

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/auth" element={<Auth />} />
        {/* 用ProtectedRoute包裹Home,限制未登录用户访问 */}
        <Route 
          path="/posts" 
          element={
            <ProtectedRoute>
              <Home />
            </ProtectedRoute>
          } 
        />
        {/* 默认路由跳转至登录页 */}
        <Route path="/" element={<Navigate to="/auth" />} />
      </Routes>
    </Router>
  );
}

export default App;

注意事项

  • 确保全局上下文Gloabaldata在登录成功后正确更新Userr的值,路由保护才能正常生效。
  • 未登录用户直接访问/posts时,会自动跳转到登录页面。

内容的提问来源于stack exchange,提问作者Amarj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:01:37