我有一个带有经过身份验证(登录)用户的 Django 应用程序。 更新:使用内置的 django 身份验证。
我有另一个(Svelte)应用程序,使用 Auth.js (https://authjs.dev) 进行身份验证,当前使用 github/facebook/linkedin 设置。
现在我想将用户从 Django 应用程序发送到 Svelte 应用程序,并自动 (i) 在 Svelte 应用程序中创建用户(如果用户不存在),以及 (ii) 将其登录到 Svelte 应用程序。
我希望最终用户体验就像从一个页面到另一个页面的常规重定向一样,并且在两个地方都保持登录状态。
我陷入了用户到达 Svelte 应用程序的部分,我需要创建一个会话。 Auth.js 有没有办法在不通过“提供者”的情况下做到这一点?
到目前为止我所拥有的是(
routes/api/sso/+server.ts
):
import { redirect } from '@sveltejs/kit'
export async function GET({url, locals, cookies}) { // should perhaps be POST..?
// TODO: validate request..
// where to go next?
const next = url.searchParams.get('next')
if (!next) throw new Error("next is required")
// who are we logging in?
const usr = get_or_create(url.searchParams('username')) // and name/email/image/etc.
// mimic auth.js login behavior...
const session_token = create_new_session_token()
locals.session = {
id: session_token,
user: {name: usr.name, email: usr.email, image: usr.image}
expires: new Date(Date.now() + 1000 * 60 * 60 * 2) // two hours
}
locals.user = usr
// ..this might be the only line needed (I'm guessing auth.js will set locals.{session,user} next time it receives a request)?
cookies.set("authjs.session-token", session_token, {path: "/", httpOnly: true, secure: true, sameSite: "strict"})
return redirect(307, next)
}
我不确定你是如何维护后端用户的。您的 Django 和 Svelet 应用程序都应该引用
authjs
上的同一个用户表。在这种情况下,只需传递 auth 标头就足够了。