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

如何使用Axios提交请求替代Next-Auth默认表单提交实现无刷新登录

Next-Auth 自定义登录页无刷新提交实现方案

核心思路

阻止表单默认提交行为,配合Axios异步提交请求,同时利用Next-Auth客户端自带的signIn方法的redirect: false配置实现无刷新会话更新。

具体实现步骤

  • 改造登录表单的提交逻辑,阻止默认刷新行为
    组件内的提交处理代码示例:
    import axios from 'axios'
    import { signIn } from 'next-auth/react'
    
    const handleLoginSubmit = async (e) => {
      // 阻止表单默认POST提交触发的页面刷新
      e.preventDefault()
      
      // 收集表单数据
      const loginParams = {
        email: e.target.email.value,
        password: e.target.password.value
      }
    
      try {
        // 可提交到你自己的业务服务端做账号密码校验,也可直接提交到Next-Auth自带的credentials回调接口
        const verifyRes = await axios.post('/api/your-custom-login-verify', loginParams)
    
        if (verifyRes.data.code === 200) {
          // 校验通过后调用Next-Auth的signIn方法更新客户端会话,加redirect: false关闭默认跳转刷新
          const loginRes = await signIn('credentials', {
            ...loginParams,
            redirect: false
          })
    
          if (!loginRes.error) {
            // 登录成功后续逻辑:比如路由跳转、成功提示
          } else {
            // 处理Next-Auth会话设置失败逻辑
          }
        }
      } catch (error) {
        // 处理请求异常、账号密码错误等失败逻辑
      }
    }
    
  • 调整Next-Auth配置文件pages/api/auth/[...nextauth].js,确保credentials provider的authorize方法可以正常返回用户信息,不要配置强制跳转逻辑。
  • 如果不需要Next-Auth自带的会话管理能力,也可以在Axios请求成功后手动将token存储到cookie/localStorage,自行管理会话状态,不过该方案需要额外处理会话过期、权限校验等逻辑,更推荐上面配合Next-Auth内置能力的实现方式。

注意:signIn方法的redirect: false参数是无刷新的核心配置,省略该参数Next-Auth会默认执行服务端跳转,仍然会触发页面刷新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:15:04