A smol authentication package with RBAC 🔐
GPL-3.0 License
Install the packages
npm i smol-auth-express
Setup an env file with accessToken & RefreshToken secrets which are long strings. You can generate it by running the following commands:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'));"
Initialize smol service
import { validateUser, smol } from 'smol-auth-express';
import express from 'express';
const app = express();
const smolConfig = {
connectionUrl: process.env.DB_URL,
accessTokenSecret: process.env.ACCESS_TOKEN_SECRET,
refreshTokenSecret: process.env.REFRESH_TOKEN_SECRET,
clientDomain: process.env.WEBSITE_DOMAIN
}
smol()
.init(app, smolConfig)
Only Express & postgreSQL (auth db) is supported
Basic Role: To grant broad permissions to a role, use the *
wildcard. For example:
smol()
.addRoles({
admin: '*',
}, { defaultRole: 'admin' })
.init(app, smolConfig)
Multiple & Specific Roles: To specify permissions for a role on a particular route and method, use an array. For example:
smol()
.addRoles({
admin: '*',
user: [{ route: '/posts', method: '*' }],
viewer: [{ route: '/posts', method: ['GET'] }]
}, { defaultRole: 'viewer' })
.init(app, smolConfig)
Default Role is required for now
Install the packages
npm i smol-auth-client
Initialize smolClient
import { smolClient } from 'smol-auth-client'
smolClient(process.env.API_DOMAIN)
Use the corresponding functions
import { signin, signup, getAuthId, signout } from 'smol-auth-client'
const signupData = await signup(email, password)
const signinData = await signin(email, password)
const authId = await getAuthId()
await signout()
Clone the repo
git clone https://github.com/reenphygeorge/smol-auth
Install all required packages
npm run install:all
Build smol-packages
npm run build
Start Example API Service
npm run start-example:api
Start Example Client Service
npm run start-example:client
Connect NocoDB to the auth db for dashboard
http://localhost:8080
To stop docker containers after exit
npm run docker:stop