ByteNoteByteNote
两套登录写在同一个文件
字

字节笔记本

2026年10月7日 · 约 2 分钟读完

两套登录写在同一个文件

API中转
¥120

流程从安装 @logto/next 开始。环境变量写在 .env.local,名字包括 NEXTAUTH_SECRET、LOGTO_ENDPOINT、LOGTO_APP_ID、LOGTO_APP_SECRET 和 LOGTO_COOKIE_SECRET。前一个密钥名属于另一套会话方案,后面四个才是这段要接的服务。

路由文件走的是另一套处理器

路由放在 app/api/auth 的 nextauth 捕获段。文件里从 next-auth 引入处理器,从 @logto/next 引入一个叫 LogtoProvider 的符号,交给处理器的 providers。客户端编号、密钥和 issuer 分别读那三个 Logto 变量。导出的是 GET 和 POST。

页面用 getServerSession 取会话,没有会话就重定向到 /api/auth/signin。有会话就显示 session.user 的 name,退出链接指向 /api/auth/signout。另一份客户端组件从 next-auth/react 引入 signIn、signOut 和 useSession。

getServerSession 读到的是这套处理器写的会话。LOGTO_COOKIE_SECRET 出现在环境变量里,却没有出现在这份路由代码里。装的包、变量名、实际调用的会话函数,三处不是同一条路径。只配了 Logto 的端点,不配处理器要的密钥,登录页和会话对不上。只配了处理器的密钥,那个没有被代码读到的 cookie 密钥也不会自己生效。

会话函数来自另一套库

欢迎语用的是会话里的名字。名字从哪一个身份源来,取决于处理器是否真的用那个提供者完成了登录。导入符号若在包里不存在,路由文件在启动时就会失败,还到不了欢迎语。

重定向目标是这套处理器的登录路径。不要改成另一个产品的登录地址,除非路由文件也换掉。

环境变量里两套密钥名都在

示例里的密钥值全是占位。不要把占位符当成已经填好的实例地址。端点要换成你自己的实例。

退出链接是一个普通锚点,指向 signout。客户端组件里的函数是另一条调用。页面上若只放了锚点,就不要同时假定按钮函数也会执行。

对话把这些步骤写成一份集成。集成要收成一条路径:要么整份文件都走捕获段里的处理器,要么改成该包自己的路由和读取方式。两套并排时,欢迎页的会话可能一直是空的,于是永远停在重定向。

相关文章

分享: