elysia-oauth2
Elysia plugin for OAuth 2.0 Authorization Flow.
Powered by Arctic@2 with more than 53 oauth2 providers!
Installation
bun install elysia-oauth2 arctic
Update
if Arctic will release some new providers, you can update it with
bun install arctic@latest
Example
import { Elysia } from "elysia";
import { oauth2 } from "elysia-oauth2";
new Elysia()
.use(
oauth2({
VK: [
"clientID",
"clientSecret",
"https://example.com/auth/vk/callback",
],
})
)
.get("/auth/vk", ({ oauth2 }) => oauth2.redirect("VK"))
.get("/auth/vk/callback", async ({ oauth2 }) => {
const tokens = await oauth2.authorize("VK");
const accessToken = tokens.accessToken();
})
.listen(3000);
[!IMPORTANT]
You should return oauth2.redirect
from the handler, because it relies on elysia's redirect() which need to return Response
CreateURL example
import { Elysia } from "elysia";
import { oauth2 } from "elysia-oauth2";
new Elysia()
.use(
oauth2({
Google: [
"clientID",
"clientSecret",
"https://example.com/auth/google/callback",
],
})
)
.get("/auth/google", async ({ oauth2, redirect }) => {
const url = oauth2.createURL("Google", ["email"]);
url.searchParams.set("access_type", "offline");
return redirect(url.href);
})
.get("/auth/google/callback", async ({ oauth2 }) => {
const tokens = await oauth2.authorize("Google");
const accessToken = tokens.accessToken();
})
.listen(3000);
Options
You can configure plugin by providing options object in second argument.
import { Elysia } from "elysia";
import { oauth2 } from "elysia-oauth2";
new Elysia().use(
oauth2(
{},
{
cookie: {
secure: true,
sameSite: "lax",
path: "/",
httpOnly: true,
maxAge: 60 * 30,
},
}
)
);
Supported providers