我认为通过路由的客户端导航和中间件的使用存在问题.
当我刷新浏览器时,这种情况就会停止.
我想强制路由每次进入中间件,以重新判断重定向到哪里.
要复制:
- 重复从浏览器搜索栏转到
/
.由于middleware.ts
,你有50%的几率被重定向到/dashboard
,50%的几率被重定向到/profile
- 转到
/login
并单击登录按钮.这将生成router.push('/')
并重定向到/dashboard
或/profile
. - 单击注销按钮.这将是
router.push('/login')
. - 下次登录时,将始终重定向到同一路径.
这是我的middleware.ts:
export function middleware(request: NextRequest) {
if (request.nextUrl.pathname === '/') {
if (Math.random() > 0.5) {
return NextResponse.redirect(new URL('/dashboard', request.url))
} else {
return NextResponse.redirect(new URL('/profile', request.url))
}
}
}
login.tsx年款:
import { NextPage } from 'next'
import { useRouter } from 'next/router'
const LoginPage: NextPage<{}> = () => {
const router = useRouter()
const login = () => {
router.push('/')
}
return (
<div>
<h1>Login</h1>
<button onClick={login}>Login</button>
</div>
)
}
export default LoginPage
和仪表板/配置文件页面:
import { NextPage } from 'next'
import { useRouter } from 'next/router'
const DashboardPage: NextPage<{}> = () => {
const router = useRouter()
const logout = () => {
router.push('/login')
}
return (
<div>
<h1>DashboardPage</h1>
<button onClick={logout}>Logout</button>
</div>
)
}
export default DashboardPage
这是Vercel中显示的站点:https://nextjs-router-clientside-test.vercel.app/
这是完整的代码:https://github.com/LautaroRiveiro/nextjs-router-clientside-test