jwtbeego

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

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

Go to latest
Published: Feb 6, 2018 License: MIT Imports: 5 Imported by: 9

README

Build Status Go Report Card GoDoc Reference Coverage Status

You can read Docs in english.

jwt-beego

Una implementación simple de dgrijalva/jwt-go para beego.

Pasos para implementar:

  1. Crear una llave RSA con los comandos de generar_key.log

  2. Generar una ruta con action POST en el controlador especificado, en este caso la ruta elegida fue /user/getToken:

// ./controllers/user.go
package controllers

import (
	...

	"github.com/juusechec/jwt-beego"
)

...

// @Title getToken
// @Description Get token from user session
// @Param	username		query 	string	true		"The username for get token"
// @Param	password		query 	string	true		"The password for get token"
// @Success 200 {string} Obtain Token
// @router /getToken [post]
func (u *UserController) GetToken() {
	username := u.Ctx.Input.Query("username")
	password := u.Ctx.Input.Query("password")

	tokenString := ""
	if username == "admin" && password == "mipassword" {
		et := jwtbeego.EasyToken{
			Username: username,
			Expires:  time.Now().Unix() + 3600, //Segundos
		}
		tokenString, _ = et.GetToken()
	}

	u.Data["json"] = "{'tokenString': '" + tokenString + "'}"
	u.ServeJSON()
	return
}

...
  1. Agregar la validación del token en cada controlador que se necesite. Esto se hace a través de la función Prepare.
// ./controllers/my_restricted_controller.go
package controllers

import (
	...

	"github.com/juusechec/jwt-beego"
)

func (c *TipoCancelacionSemestreController) Prepare() {
	tokenString := c.Ctx.Input.Query("tokenString")
	// O puede ser leído de una cabecera HEADER!!
	// tokenString := c.Ctx.Request.Header.Get("X-JWTtoken")

	et := jwtbeego.EasyToken{}
	valido, _, _ := et.ValidateToken(tokenString)
	if !valido {
		c.Ctx.Output.SetStatus(401)
		c.Data["json"] = "Permission Deny"
		c.ServeJSON()
	}
	return
}

...

Con esto ya estaría terminado, pero si se quiere hacer que todos los controladores tengan la misma validación se puede hacer:

  1. Configurar un nuevo paquete.
//./myBeego/controller.go

//Se crea un espacio de nombres llamado myBeego
package myBeego

//Se agrega la biblioteca de beego
import (
	...
	"github.com/astaxie/beego"
)

//Se genera un tipo Controller que hereda de beego.Controller
type Controller struct {
	beego.Controller
}

//Se redefine lo que hace la función Prepare
//* es un apuntador al igual que en C
//& hace referencia a la dirección de memoria
//La iniciación de una variable o funcion con * se traduce en que almacena
//u := 10 //var z *int  //z = &u //fmt.Println(z)//0x1040e0f8
//var s *string //var r **string = &s //fmt.Println(r)//0x1040a120
func (c *Controller) Prepare() {
	//Lo que quieras hacer en todos los controladores
	tokenString := c.Ctx.Input.Query("tokenString")
	// O puede ser leído de una cabecera HEADER!!
	// tokenString := c.Ctx.Request.Header.Get("X-JWTtoken")

	et := jwtbeego.EasyToken{}
	valido, _, _ := et.ValidateToken(tokenString)
	if !valido {
		c.Ctx.Output.SetStatus(401)
		c.Data["json"] = "Permission Deny"
		c.ServeJSON()
	}
	return
}

  1. Configurar llamado del nuevo Controller en todos los controladores:
//./controllers/miObjeto.go

package controllers

import (
	...
	"github.com/juusechec/jwt-beego-implementation/myBeego"
	"github.com/juusechec/jwt-beego"
)

type MiObjetoController struct {
	//beego.Controller
	myBeego.Controller
}

...

Ejemplo de uso:

Se basa en:

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type EasyToken

type EasyToken struct {
	// Username is the name of the user
	Username string
	// Expires is a timestamp with expiration date
	Expires int64
}

EasyToken is an Struct to encapsulate username and expires as parameter

func (EasyToken) GetToken

func (e EasyToken) GetToken() (string, error)

GetToken is a function that exposes the method to get a simple token for jwt

func (EasyToken) ValidateToken

func (e EasyToken) ValidateToken(tokenString string) (bool, string, error)

ValidateToken get token strings and return if is valid or not

Jump to

Keyboard shortcuts

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