diff options
author | Hélène <pleroma-dev@helene.moe> | 2022-08-23 17:15:06 +0200 |
---|---|---|
committer | Hélène <pleroma-dev@helene.moe> | 2022-08-24 03:40:05 +0200 |
commit | 439c1baf25b19723bcbaac78b10d00181074e3b6 (patch) | |
tree | ec121c7afd07860134475064d6d37996bfe36fe2 | |
parent | a022b9d73340f0fcf2bc74fb60de6324a1da0b12 (diff) | |
download | pleroma-439c1baf25b19723bcbaac78b10d00181074e3b6.tar.gz |
OAuthPlug: use user cache instead of joining
As this plug is called on every request, this should reduce load on the
database by not requiring to select on the users table every single
time, and to instead use the by-ID user cache whenever possible.
-rw-r--r-- | lib/pleroma/web/plugs/o_auth_plug.ex | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/pleroma/web/plugs/o_auth_plug.ex b/lib/pleroma/web/plugs/o_auth_plug.ex index 0f74d626b..ba04ddb72 100644 --- a/lib/pleroma/web/plugs/o_auth_plug.ex +++ b/lib/pleroma/web/plugs/o_auth_plug.ex @@ -47,15 +47,17 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do # @spec fetch_user_and_token(String.t()) :: {:ok, User.t(), Token.t()} | nil defp fetch_user_and_token(token) do - query = + token_query = from(t in Token, - where: t.token == ^token, - join: user in assoc(t, :user), - preload: [user: user] + where: t.token == ^token ) - with %Token{user: user} = token_record <- Repo.one(query) do + with %Token{user_id: user_id} = token_record <- Repo.one(token_query), + false <- is_nil(user_id), + %User{} = user <- User.get_cached_by_id(user_id) do {:ok, user, token_record} + else + _ -> nil end end |