Skip to content
forked from vegax87/gologin

Session cookie-based login middleware (like Flask-login) for Go web apps

License

Notifications You must be signed in to change notification settings

joncalhoun/gologin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

GoLogin

GoLogin is a login middleware for Go web apps inspired by Flask login.

Example usage (main.go):

package main

import (
	"github.com/veegee/gologin"
	"github.com/gorilla/mux"
)

var CookieStore *sessions.CookieStore
var LoginManager *gologin.GoLogin

func LoadUser(userid string) gologin.User {
	user := &dbmodels.User{}

	// ... query the database and populate the user object ...

	return user
}

func PermissionDenied(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "error: not logged in")
}

func Index(w http.ResponseWriter, r *http.Request) {
	if !LoginManager.IsLoggedIn(r) {
		LoginManager.PermissionDeniedHandler(w, r)
		return
	}
}

func Login(w http.ResponseWriter, r *http.Request) {
	currentUser, ok := context.Get(r, gologin.CV_CURRENTUSER).(*dbmodels.Entity)

	if currentUser != nil && ok {
		// already logged in
	}

	user := ... look up user by email and verify password ...

	if user != nil {
		LoginManager.LoginUser(user, w, r)
		fmt.Fprintf(w, "Login success")
	} else {
		http.Error(w, "Login failed", http.StatusForbidden)
	}
}

func main() {
	CookieStore = sessions.NewCookieStore([]byte("something-very-secret"))
	LoginManager = &gologin.GoLogin{CookieStore, LoadUser, PermissionDenied}

	router := mux.NewRouter()
	router.HandleFunc("/", Index)
	router.HandleFunc("/login", Login)

	n := negroni.New()
	n.Use(globals.LoginManager)
	n.UseHandler(router)
	n.Run("0.0.0.0:8002")
}

About

Session cookie-based login middleware (like Flask-login) for Go web apps

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Go 100.0%