An open-source auth providers for Cloudflare workers
worker-auth-providers is an open-source providers to make authentication easy with workers. Very lightweight script which doesn't need a lot of dependencies. Plug it with any framework or template of workers.
Step 1: Install the dependencies
npm install worker-auth-providers
Step 2: Import the dependencies
import {
github, google,
twilio, facebook, discord,
spotify
} from "worker-auth-providers";
Step 3: Redirect users
const githubLoginUrl = await github.redirect({
options: {
clientId,
},
});
return {
status: 302,
headers: {
location: githubLoginUrl,
},
};
// or send otp
const res = await awsSNS.send({
options: {
phone,
region: 'ap-south-1',
kvProvider: WORKER_AUTH_PROVIDERS_STORE,
},
})
Step 4: Get user
const { user: providerUser, tokens } = await github.users({
options: { clientSecret, clientId },
request,
});
console.log("[providerUser]", providerUser);
// or verify otp
const res = await awsSNS.verify({
options: {
phone,
otp,
kvProvider: WORKER_AUTH_PROVIDERS_STORE,
secret: 'eyJhbGciOiJIUzI1NiJ9.ew0KICAic3ViIjogIjE2Mjc4MTE1MDEiLA0KICAibmFtZSI6ICJoYWFsLmluIiwNCiAgImlhdCI6ICIwMTA4MjAyMCINCn0.aNr18szvBz3Db3HAsJ-2KHYbnnHwHfK65CiZ_AWwpc0',
},
})
Coming soon
Contributions are always welcome! See contributing.md for ways to get started. Please adhere to this project's code of conduct.
Use cookie. Setting a cookie to indicate that theyβre authorized for future requests
const cookieKey = "worker-auth-providers"
const persistAuth = async exchange => {
const date = new Date() date.setDate(date.getDate() + 1)
const headers = {
Location: "/",
"Set-cookie": `${cookieKey}=${id}; Secure; HttpOnly; SameSite=Lax; Expires=${date.toUTCString()}`,
}
return { headers, status: 302 }
}
Easy, delete the cookie
export const logout = event => {
const cookieHeader = event.request.headers.get('Cookie')
if (cookieHeader && cookieHeader.includes(cookieKey)) {
return {
headers: {
'Set-cookie': `${cookieKey}=""; HttpOnly; Secure; SameSite=Lax;`,
},
}
}
return {}
}
If you have any feedback, please reach out to me at subhendukundu14@gmail.com