GuardianRedis

Hex.pm 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"}
  ]
end

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: "127.0.0.1",
  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()}
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/guardian_redis.