@@ -12,7 +12,21 @@ defmodule AlgoraWeb.UserAuth do
1212 def on_mount ( :current_user , _params , session , socket ) do
1313 case session do
1414 % { "user_id" => user_id } ->
15- { :cont , Phoenix.Component . assign_new ( socket , :current_user , fn -> Accounts . get_user ( user_id ) end ) }
15+ case socket . assigns [ :current_user ] do
16+ % Accounts.User { } = _user ->
17+ { :cont , socket }
18+
19+ nil ->
20+ current_user = Accounts . get_user ( user_id )
21+ current_context = Accounts . get_last_context_user ( current_user )
22+ all_contexts = Accounts . get_contexts ( current_user )
23+
24+ { :cont ,
25+ socket
26+ |> Phoenix.Component . assign ( :current_user , current_user )
27+ |> Phoenix.Component . assign ( :current_context , current_context )
28+ |> Phoenix.Component . assign ( :all_contexts , all_contexts ) }
29+ end
1630
1731 % { } ->
1832 { :cont , Phoenix.Component . assign ( socket , :current_user , nil ) }
@@ -22,7 +36,11 @@ defmodule AlgoraWeb.UserAuth do
2236 def on_mount ( :ensure_authenticated , _params , session , socket ) do
2337 case get_authenticated_user ( session , socket ) do
2438 { :ok , user } ->
25- { :cont , Phoenix.Component . assign_new ( socket , :current_user , fn -> user end ) }
39+ { :cont ,
40+ socket
41+ |> Phoenix.Component . assign_new ( :current_user , fn -> user end )
42+ |> Phoenix.Component . assign_new ( :current_context , fn -> Accounts . get_last_context_user ( user ) end )
43+ |> Phoenix.Component . assign_new ( :all_contexts , fn -> Accounts . get_contexts ( user ) end ) }
2644
2745 { :error , :unauthenticated } ->
2846 { :halt , redirect_require_login ( socket ) }
@@ -36,7 +54,11 @@ defmodule AlgoraWeb.UserAuth do
3654 raise ( AlgoraWeb.NotFoundError )
3755 end
3856
39- { :cont , Phoenix.Component . assign_new ( socket , :current_user , fn -> user end ) }
57+ { :cont ,
58+ socket
59+ |> Phoenix.Component . assign_new ( :current_user , fn -> user end )
60+ |> Phoenix.Component . assign_new ( :current_context , fn -> Accounts . get_last_context_user ( user ) end )
61+ |> Phoenix.Component . assign_new ( :all_contexts , fn -> Accounts . get_contexts ( user ) end ) }
4062
4163 { :error , :unauthenticated } ->
4264 { :halt , redirect_require_login ( socket ) }
@@ -48,7 +70,7 @@ defmodule AlgoraWeb.UserAuth do
4870 % { "user_id" => user_id } ->
4971 new_socket = Phoenix.Component . assign_new ( socket , :current_user , fn -> Accounts . get_user! ( user_id ) end )
5072
51- case new_socket . assigns . current_user do
73+ case new_socket . assigns [ : current_user] do
5274 % Accounts.User { } = user ->
5375 { :ok , user }
5476
@@ -94,7 +116,11 @@ defmodule AlgoraWeb.UserAuth do
94116 end
95117
96118 def put_current_user ( conn , user ) do
97- conn = assign ( conn , :current_user , user )
119+ conn =
120+ conn
121+ |> assign ( :current_user , user )
122+ |> assign ( :current_context , Accounts . get_last_context_user ( user ) )
123+ |> assign ( :all_contexts , Accounts . get_contexts ( user ) )
98124
99125 conn
100126 |> renew_session ( )
@@ -130,7 +156,11 @@ defmodule AlgoraWeb.UserAuth do
130156 def fetch_current_user ( conn , _opts ) do
131157 user_id = get_session ( conn , :user_id )
132158 user = user_id && Accounts . get_user ( user_id )
133- assign ( conn , :current_user , user )
159+
160+ conn
161+ |> assign ( :current_user , user )
162+ |> assign ( :current_context , Accounts . get_last_context_user ( user ) )
163+ |> assign ( :all_contexts , Accounts . get_contexts ( user ) )
134164 end
135165
136166 @ doc """
0 commit comments