我有一个 SvelteKit 应用程序,我想在其中通过 Auth.js 库启用身份验证。
我的项目设置如下:
src/hooks.server.js
import { SvelteKitAuth } from '@auth/sveltekit';
import GoogleProvider from '@auth/core/providers/google';
import { GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET } from '$env/static/private';
export const handle = SvelteKitAuth({
providers: [GoogleProvider({ clientId: GOOGLE_CLIENT_ID, clientSecret: GOOGLE_CLIENT_SECRET })],
});
src/routes/protected/+layout.server.js
import { redirect } from '@sveltejs/kit';
export const load = async (event) => {
const session = await event.locals.getSession();
if (!session) {
throw redirect(307, 'auth/signin');
}
return {
session
};
};
src/routes/protected/+page.svelte
<h1>Protected route</h1>
.env
GOOGLE_CLIENT_ID=MY_GOOGLE_CLIENT_ID
GOOGLE_CIENT_SECRET=MY_GOOGLE_CLIENT_SECRET
当我导航到受保护的路由 (/protected) 时,我会从 Auth.js 获得默认的 Google OAuth 弹出窗口。但是,当我选择 Gmail 帐户继续操作时,控制台会显示以下错误:
[auth][error][CallbackRouteError]: Read more at https://errors.authjs.dev#callbackrouteerror
[auth][cause]: TypeError: "client.client_secret" property must be a non-empty string
我尝试查看错误消息中给出的 URL 中提到的文档,但无法找出问题所在。我在设置项目时也在 Google Console 中配置了正确的域 URL。
SvelteKit 允许从客户端代码访问以 PUBLIC_ 开头的环境变量。所有其他环境变量都是私有的,只能通过服务器端代码访问。
https://joyofcode.xyz/sveltekit-environment-variables#static-for-variables-during-the-build-process