# GuardianRedis

![Build Status](

Redis repository for Guardian DB. 

## Installation

You can use `GuardianRedis` in case you use [Guardian]( library for authentication 
and [Guardian.DB]( library for JWT tokens persistence.  

If [available in Hex](, the package can be installed
by adding `guardian_redis` to your list of dependencies in `mix.exs`:

def deps do
    {:guardian_redis, "~> 0.1.0"}

## Configuration

All you need to install Guardian DB as per [Guardian.DB README]( 
and just use `GuardianRedis.Repo` as a `repo` in settings.

config :guardian, Guardian.DB,
       repo: GuardianRedis.Repo # Add this Redis repository module

Apart from this please set up Redis configuration:

config :guardian_redis, :redis,
  host: "",
  port: 6379,
  pool_size: 10

## Implement Guardian.DB repo for a different storage

Initially, Guardian.DB was aimed to store and operate JWT tokens in a PostgreSQL database. 
Sometimes round trip to Postgres database is expensive so this is why this Redis repo was born.
In case you want to implement a possibility for Guardian.DB to use different storage, e.g. ETS (or MySQL), 
you need to implement `Guardian.DB.Adapter` behavior. Thanks to [@aleDsz]( it's quite simple:

defmodule Guardian.DB.Adapter do
  @moduledoc """
  The Guardian DB Adapter.

  This behaviour allows to use any storage system
  for Guardian Tokens.

  @typep query :: Ecto.Query.t()
  @typep schema :: Ecto.Schema.t()
  @typep schema_or_changeset :: schema() | Ecto.Changeset.t()
  @typep queryable :: query() | schema()
  @typep opts :: keyword()
  @typep id :: pos_integer() | binary() | Ecto.UUID.t()

  @callback one(queryable()) :: nil | schema()
  @callback insert(schema_or_changeset()) :: {:ok, schema()}
  @callback delete(schema_or_changeset()) :: {:ok, schema()}
  @callback delete_all(queryable()) :: {:ok, pos_integer()}
  @callback delete_all(queryable(), opts()) :: {:ok, pos_integer()}

Documentation can be generated with [ExDoc](
and published on [HexDocs]( Once published, the docs can
be found at [](