gofiberfirebaseauth

package module
v0.0.0-...-aa46fa3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 21, 2023 License: MIT Imports: 7 Imported by: 0

README

Go Fiber Firebase Auth Middleware

CircleCI

Authenticate your endpoints with Firebase Authentication .

gofiber-firebaseauth is inspired by npm package express-firebase-auth .

Note1

This package is designed to work with Go Fiber Framework (Express inspired go framework)

Features

  • Authenticate the user using Firebase before running the function.
  • Ability to skip authentication on public API endpoints.

Installing / Getting started

In your gofiber app

$ go get -u github.com/gofiber/fiber/v2
$ go get github.com/quezzies/gofiber-firebaseauth

Configure

In your app import the middleware

import (
  "github.com/gofiber/fiber/v2"
  "github.com/quezzies/gofiber-firebaseauth"
)

Provide a minimal config

    // Provide a minimal config
    app.Use(gofiberfirebaseauth.New(Config{
    	FirebaseApp: FirebaseApp,
    }))

Or extend your config for customization


    // Or extend your config for customization
	app.Use(gofiberfirebaseauth.New(Config{
	
	// New firebase authentication object
	// Mandatory. Default: nil
	FirebaseApp:  FirebaseApp

	// Ignore urls array - Format = "{METHOD} follwed by :: then /{route}"
	// Optional. Default: nil
	IgnoreUrls : []string{"GET::/login","POST::/create-user"}

	// Skip Email Check.
	// Optional. Default: nil
	CheckEmailVerified : true

	// Ignore email verification for these routes
	// Optional. Default: nil
	CheckEmailVerifiedIgnoredUrls :  []string{"GET::/login","POST::/create-user"}

	// Authorizer defines a function which authenticates the Authorization token and returns 
	// the authenticated token
	// Optional. Default: nil
	Authorizer: func(IDToken string, CurrentURL string) (*auth.Token, error){
        // create your own authentication here 
	// this returns the firebase id token
		return token, nil
	},
	// Context key to store user information from the token into context.
	// Optional. Default: "user".
	ContextKey : "authUser"
    }))

Use user in your fiber app

func Handler(ctx *fiber.Ctx) error {
	// Get user stored in context
	// Default: user
	currentUser := ctx.Locals("user").(gofiberfirebaseauth.User)
	fmt.Println(currentUser)
	fmt.Println(currentUser.Email)

}

All available configuration

Option Value Config type
FirebaseApp (Note1) An initialized firebase app. Refer to Firebase setup FirebaseApp *firebase.App
IgnoredUrls (Note1)(Optional) An array of URLs where you need to skip the authentication. IgnoreUrls []string
CheckEmailVerified (Optional) (Default: false) If set to true, only users with a verified email will be allowed access. CheckEmailVerified bool
CheckEmailVerifiedIgnoredUrls (Optional) An array of URLs where you need to skip the email verified check. CheckEmailVerifiedIgnoredUrls []string
Authorizer (Optional), Default: nil , Authorizer defines a function which authenticates the Authorization token and returns the authenticated token. Use this if you want to override token authorization Authorizer func(string, string) (*auth.Token, error)
ContextKey (Optional), Default: "user" , Context key to store user information from the token into context. ContextKey string
SuccessHandler (Optional), Default:nil, SuccessHandler defines a function which is executed for a valid token. SuccessHandler fiber.Handler
ErrorHandler (Optional), Default:nil, ErrorHandler defines a function which is executed for a invalid token. ErrorHandler fiber.ErrorHandler
Note2

You must provide already initialized FirebaseApp app. You cannot initialize two firebase apps.

Note3

Ignore url accept array of string. URl format should follow below format
{METHOD}::/{url}
Example:
GET::/login
POST::/login

IgnoreUrl only supports routes without params or query . (PR are welcome).To ignore urls with param or query, declare the routes before the middleware declaration.

Developing , TESTING and environment setup

Prerequisites
  • Go 1.14 +
  • Configured Firebase app and Google Service Account Credential (JSON containing admin credentials). Refer to Firebase setup
  • Web API Key
  • Sample user email and password from firebase. You can manually create a user from the firebase console.

You can get all the configurations from Firebase Console.

Setting up Development Environment for testing

Clone the repo and set your firebase credentials in your .env file


SERVICE_ACCOUNT_JSON = "path to service account credential json"
WEB_API_KEY = 
TEST_USER_EMAIL = ""
TEST_USER_PASSWORD = ""
  	

Versioning

We use SemVer for versioning. For the versions available, see the link to tags on this repository.

Style guide

Uber style guide

License

MIT licensed.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ConfigDefault = Config{
	Next:                          nil,
	IgnoreUrls:                    nil,
	Authorizer:                    nil,
	ErrorHandler:                  nil,
	SuccessHandler:                nil,
	CheckEmailVerified:            false,
	CheckEmailVerifiedIgnoredUrls: nil,
	ContextKey:                    "",
}

ConfigDefault is the default config

Functions

func New

func New(config Config) fiber.Handler

New - Signature Function

Types

type Config

type Config struct {

	// New firebase authntication object
	// Mandatory. Default: nil
	FirebaseApp *firebase.App

	// Ignore urls array
	// Optional. Default: nil
	IgnoreUrls []string

	// Skip Email Check.
	// Optional. Default: nil
	CheckEmailVerified bool

	// Ignore email verification for these routes
	// Optional. Default: nil
	CheckEmailVerifiedIgnoredUrls []string

	// Filter defines a function to skip middleware.
	// Optional. Default: nil
	Next func(c *fiber.Ctx) bool

	// Authorizer defines a function which authenticate the Authorization token and return the authenticated token
	// Optional. Default: nil
	Authorizer func(string, string) (*auth.Token, error)

	// SuccessHandler defines a function which is executed for a valid token.
	// Optional. Default: nil
	SuccessHandler fiber.Handler

	// ErrorHandler defines a function which is executed for an invalid token.
	// It may be used to define a custom JWT error.
	// Optional. Default: nil
	ErrorHandler fiber.ErrorHandler

	// Context key to store user information from the token into context.
	// Optional. Default: "user".
	ContextKey string
}

Config defines the config for middleware

type User

type User struct {
	EmailVerified bool
	UserID, Email string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL