Hi, thank for your help in advance.
I’m building a new app with phoenix and live view
I’m trying to build a multi tenant app and I followed Ecto’s guide for multi tenancy with foreign keys.
But after implementing it, log in failed
So I went to get_user_by_email_and_password and set skip_user_id as instructed in the guide
def get_user_by_email_and_password(email, password)
when is_binary(email) and is_binary(password) do
user = Repo.get_by(User, email: email, skip_user_id: true)
if User.valid_password?(user, password), do: user
end
In case the Repo code is helpful, here it is
defmodule TestApp.Repo do
use Ecto.Repo,
otp_app: :test_app,
adapter: Ecto.Adapters.Postgres
require Ecto.Query
@impl true
def prepare_query(_operation, query, opts) do
dbg(opts)
cond do
opts[:skip_user_id] || opts[:schema_migration] ->
{query, opts}
user_id = opts[:user_id] ->
{Ecto.Query.where(query, user_id: ^user_id), opts}
true ->
raise "expected user_id or skip_user_id to be set"
end
end
@tenant_key {__MODULE__, :user_id}
def put_user_id(user_id) do
Process.put(@tenant_key, user_id)
end
def get_user_id() do
Process.get(@tenant_key)
end
@impl true
def default_options(_operation) do
[user_id: get_user_id()]
end
end
Any clue of what is happening here?