Skip to content

Elysia plugin for OAuth 2.0 Authorization Flow with more than 53 providers

License

Notifications You must be signed in to change notification settings

kravetsone/elysia-oauth2

Repository files navigation

elysia-oauth2

npm npm downloads

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();

        // send request to API with token
    })
    .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();

        // send request to API with token
    })
    .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: {
                // defaults
                secure: true,
                sameSite: "lax",
                path: "/",
                httpOnly: true,
                maxAge: 60 * 30, // 30 min
            },
        }
    )
);

Supported providers

About

Elysia plugin for OAuth 2.0 Authorization Flow with more than 53 providers

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •