pltoledo
pltoledo
BABetter Auth
Created by roguesherlock on 2/6/2025 in #help
How do I setup bearer auth for social logins?
I actually tried to add a hook to the authentication service in the backend, but the .responseHeaders prop is not present in the context:
betterAuth({
plugins: [openAPI({ path: "/docs" }), bearer()],
database: drizzleAdapter(database, {
provider: "pg",
schema: { user, session, verification, account },
}),
trustedOrigins: trustedOrigins,
basePath: `${process.env.API_BASE_PATH}/auth`,
emailAndPassword: {
enabled: true,
},
socialProviders: {
google: {
clientId: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
},
},
hooks: {
after: createAuthMiddleware(async (ctx) => {
console.log(ctx.path);
if (ctx.path.startsWith("/callback")) {
// the bewlow line returns undefined
console.log(ctx.context.responseHeaders);
const setCookie = ctx.context.responseHeaders?.get("set-cookie");
console.log(setCookie);
if (!setCookie) {
return;
}
const parsedCookies = parseSetCookieHeader(setCookie);
const cookieName = ctx.context.authCookies.sessionToken.name;
const sessionCookie = parsedCookies.get(cookieName);
if (
!sessionCookie ||
!sessionCookie.value ||
sessionCookie["max-age"] === 0
) {
return;
}
const token = sessionCookie.value;
ctx.setHeader("set-auth-token", token);
ctx.setHeader("Access-Control-Expose-Headers", "set-auth-token");
}
}),
},
});
betterAuth({
plugins: [openAPI({ path: "/docs" }), bearer()],
database: drizzleAdapter(database, {
provider: "pg",
schema: { user, session, verification, account },
}),
trustedOrigins: trustedOrigins,
basePath: `${process.env.API_BASE_PATH}/auth`,
emailAndPassword: {
enabled: true,
},
socialProviders: {
google: {
clientId: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
},
},
hooks: {
after: createAuthMiddleware(async (ctx) => {
console.log(ctx.path);
if (ctx.path.startsWith("/callback")) {
// the bewlow line returns undefined
console.log(ctx.context.responseHeaders);
const setCookie = ctx.context.responseHeaders?.get("set-cookie");
console.log(setCookie);
if (!setCookie) {
return;
}
const parsedCookies = parseSetCookieHeader(setCookie);
const cookieName = ctx.context.authCookies.sessionToken.name;
const sessionCookie = parsedCookies.get(cookieName);
if (
!sessionCookie ||
!sessionCookie.value ||
sessionCookie["max-age"] === 0
) {
return;
}
const token = sessionCookie.value;
ctx.setHeader("set-auth-token", token);
ctx.setHeader("Access-Control-Expose-Headers", "set-auth-token");
}
}),
},
});
23 replies
BABetter Auth
Created by roguesherlock on 2/6/2025 in #help
How do I setup bearer auth for social logins?
@lonelyplanet can you elaborate on this custom injection of the set-auth-token header? I am fairly new to Javascript and am facing this issue as well
23 replies