GuardianRedis
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.