<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="362204" data-post-id="362204">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="AlchemistCamp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/AlchemistCamp/120/8823_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  AlchemistCamp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for clarifying. I’ve been using the same patterns given the divide of admin/user parts of the app, so it sounds like my approach is still pretty much on the well-beaten track.</p>
<p>One thing that does feel like a bit of a gap in the model, though, is how the generators make the <code>delete</code> action in LiveViews performed via a link with <code>phx-click={JS.push("delete", value: %{id: level.id})</code> and then catch the event with a <code>handle_event/3</code> that matches on the delete. AFIK, there’s no simple way to catch this by doing something in the <code>mount</code> part of the LV lifecycle.</p>
<p>It’s probably a small thing since people won’t be copying the pattern from the delete button for a bunch of other actions (hopefully), but thinking about auth always has me a bit paranoid.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362204" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/66">Post #65</a>
	                </div>
	            </div>
              <div id="likers-container-362204" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362204"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #65"></div>
  </section>
</div>
    <div class="postbit" id="362208" data-post-id="362208">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="steffend" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/steffend/120/20548_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  steffend
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Phoenix Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Well generally speaking, the code in a handle_event always needs to verify that the user has the permission to do the action (with the specified parameters) as you can never trust the client. That’s why the generators fetch the resource again in handle_event:</p>
<p><a href="https://github.com/phoenixframework/phoenix/blob/d94cc650917c2fce58f5997813b865c0f966011c/priv/templates/phx.gen.live/index.ex#L57" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/phoenixframework/phoenix/blob/d94cc650917c2fce58f5997813b865c0f966011c/priv/templates/phx.gen.live/index.ex#L57</a></p>
<p>If an attacker passes an ID that doesn’t belong to the user, that call would fail.<br>
And as an extra check, the context again asserts that the scoped resource matches the passed scope:</p>
<p><a href="https://github.com/phoenixframework/phoenix/blob/d94cc650917c2fce58f5997813b865c0f966011c/priv/templates/phx.gen.context/schema_access_scope.ex#L117" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/phoenixframework/phoenix/blob/d94cc650917c2fce58f5997813b865c0f966011c/priv/templates/phx.gen.context/schema_access_scope.ex#L117</a></p>
<p>So I’m not sure what gap in the model you see there, as that is something all actions initiated by a client have in common.</p>
<aside class="quote no-group" data-username="AlchemistCamp" data-post="66" data-topic="70256">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/alchemistcamp/48/8823_2.png" class="avatar"> AlchemistCamp:</div>
<blockquote>
<p>It’s probably a small thing since people won’t be copying the pattern from the delete button for a bunch of other actions (hopefully)</p>
</blockquote>
</aside>
<p>How would you do it?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362208" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/67">Post #66</a>
	                </div>
	            </div>
              <div id="likers-container-362208" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362208"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #66"></div>
  </section>
</div>
    <div class="postbit" id="362209" data-post-id="362209">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="LostKobrakai" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/LostKobrakai/120/3072_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  LostKobrakai
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-Phoenix-Core-Team" data-username="steffend" data-post="67" data-topic="70256">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/steffend/48/20548_2.png" class="avatar"> steffend:</div>
<blockquote>
<p>Well generally speaking, the code in a handle_event always needs to verify that the user has the permission to do the action (with the specified parameters) as you can never trust the client.</p>
</blockquote>
</aside>
<p>That’s also how this is documented:</p><aside class="onebox allowlistedgeneric" data-onebox-src="https://phoenix-live-view.hexdocs.pm/security-model.html">
  <header class="source">

      <a href="https://phoenix-live-view.hexdocs.pm/security-model.html" target="_blank" rel="noopener nofollow">phoenix-live-view.hexdocs.pm</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://phoenix-live-view.hexdocs.pm/security-model.html" target="_blank" rel="noopener nofollow">Security considerations — Phoenix LiveView v1.2.5</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362209" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/68">Post #67</a>
	                </div>
	            </div>
              <div id="likers-container-362209" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362209"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #67"></div>
  </section>
</div>
    <div class="postbit" id="362213" data-post-id="362213">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="hubertlepicki" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hubertlepicki/120/6822_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  hubertlepicki
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group quote-modified" data-username="AlchemistCamp" data-post="66" data-topic="70256">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/alchemistcamp/48/8823_2.png" class="avatar"> AlchemistCamp:</div>
<blockquote>
<p>phx-click={JS.push(“delete”, value: %{id: level.id})</p>
</blockquote>
</aside>
<p>why is it done using this front-end JS wrapper? Is it because the generator also uses streams for assigns and there is no associated resource on the server to speak of?</p>
<p>I don’t quite understand why it’s not simply <code>phx-click=delete and phx-value-id=...</code> which could just work having a glance at the code.</p>
<p>Is this a new preferred convention or is it just a matter of preference to write it this way?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362213" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/69">Post #68</a>
	                </div>
	            </div>
              <div id="likers-container-362213" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362213"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #68"></div>
  </section>
</div>
    <div class="postbit" id="362214" data-post-id="362214">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sodapopcan" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/120/34668_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sodapopcan
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve seen one of two people on here express that they just prefer doing it with JS commands.  At work we have some components that only take JS commands which is slightly simpler than checking if a string or JS command was passed.  It’s a little more consistent and can be still be tested with LiveViewTest so why not!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362214" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/70">Post #69</a>
	                </div>
	            </div>
              <div id="likers-container-362214" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362214"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #69"></div>
  </section>
</div>
    <div class="postbit" id="362216" data-post-id="362216">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Sancxo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Sancxo/120/24778_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Sancxo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The code sample shared by AlchemistCamp is incomplete, actually you have a pipe inside the phx-click explaining why the generators uses <code>JS.push</code> instead of just <code>phx-click="delete"</code>.<br>
The full generated code is <code>phx-click={JS.push(“delete”, value: %{id: level.id}) |&gt; hide("##{id}")}</code>. The <code>hide/1</code> function is just a core_components.ex front-end function to do optimistic UI after the event is triggered.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362216" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/71">Post #70</a>
	                </div>
	            </div>
              <div id="likers-container-362216" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362216"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #70"></div>
  </section>
</div>
    <div class="postbit" id="362279" data-post-id="362279">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertoSchneiders" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertoSchneiders/120/32347_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertoSchneiders
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This is awesome. Thank you!</p>
<p>Is it ready to be tested on existing 1.7 projects? If so, any migration guides I can follow?</p>
<p>I’m wondering how hard it will be to integrate the new Tailwind v4/DaisyUI into an existing project. I tried to just update the phoenix dependency, but it seems that <code>phoenix_live_view</code> is still locked to phoenix 1.7.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362279" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/72">Post #71</a>
	                </div>
	            </div>
              <div id="likers-container-362279" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362279"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #71"></div>
  </section>
</div>
    <div class="postbit" id="362309" data-post-id="362309">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="AlchemistCamp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/AlchemistCamp/120/8823_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  AlchemistCamp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yes, the Context functions act as a back-stop, so this is really only a front-end consideration. It’s probably only something I’d want to do if a lot of writes were being initiated from <code>handle_event</code>, not just for a generated delete button.</p>
<p>I was imagining some sort of flag or hook to use to require all events in a LiveView address the question of authentication. This way, unauthenticated users would automatically be directed to the login page on <code>handle_event</code> functions that aren’t explicitly exempted from the requirement.</p>
<p>Here’s a possible way I came up with:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule AppWeb.SecureLiveView do
  use AppWeb, :live_view

  @doc """
  Enforces authentication for all events by default.
  Events in the exempt_events option are not checked for authentication.
  """
  defmacro __using__(opts) do
    exempt_events = Keyword.get(opts, :exempt_events, [])

    quote do
      use AppWeb, :live_view
      @exempt_events_list unquote(exempt_events)

      @before_compile AppWeb.SecureLiveView
    end
  end

  defmacro __before_compile__(env) do
    module = env.module

    if Module.defines?(module, {:handle_event, 3}) do
      # Extract the function definition and handle different AST formats
      function_def = Module.get_definition(module, {:handle_event, 3})
      {args, body} = extract_args_and_body(function_def)

      # Generate the wrapper function's AST
      wrapper_def = quote do
        def __original_handle_event__(unquote_splicing(args)) do
          unquote(body)
        end
      end

      quote do
        # Inject the wrapper definition
        unquote(wrapper_def)
        Module.delete_definition(__MODULE__, {:handle_event, 3})

        # Redefine handle_event with auth check
        # Ideally, break this out into a function in UserAuth
        def handle_event(event, params, socket) do
          if event in @exempt_events_list or socket.assigns[:current_scope] do
            # Call our stored implementation
            __original_handle_event__(event, params, socket)
          else
            {:noreply,
             socket
             |&gt; Phoenix.LiveView.put_flash(:error, "You must re-authenticate to access this page.")
             |&gt; Phoenix.LiveView.redirect(to: ~p"/users/log-in")}
          end
        end
      end
    else
      # No handle_event defined
    end
  end

  # Helper function to extract args and body from different AST formats
  defp extract_args_and_body({:v1, :def, _meta, [{_head_meta, args, [], body}]}) do
    {args, body}
  end

  # Fallback for older Elixir versions
  defp extract_args_and_body({:def, _meta, [{:handle_event, _fun_meta, args}, body]}) do
    {args, body}
  end
end
</code></pre>
<p>Then in the view to be locked down, use this customized LiveView and enumerate the events that don’t go through the logic to force authentication:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule AppWeb.ThingLive.Index do
  use AppWeb.SecureLiveView, exempt_events: ["flag", "feedback"]
  #...
end
</code></pre>
<p>Also, as an aside, if anyone sees a way to simplify this macro a bit, please share! I found it more difficult than I’d expected to intercept a function from the using module and then conditionally delegate back to it.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362309" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/73">Post #72</a>
	                </div>
	            </div>
              <div id="likers-container-362309" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362309"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #72"></div>
  </section>
</div>
    <div class="postbit" id="362319" data-post-id="362319">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="rhcarvalho" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/rhcarvalho/120/32243_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  rhcarvalho
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Sorry I didn’t read your code, but since you asked for something simpler, did you know about server-side lifecycle hooks?</p>
<p>I’d use them to intercept <code>handle_event</code>:</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://phoenix-live-view.hexdocs.pm/Phoenix.LiveView.html">
  <header class="source">

      <a href="https://phoenix-live-view.hexdocs.pm/Phoenix.LiveView.html" target="_blank" rel="noopener nofollow ugc">phoenix-live-view.hexdocs.pm</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://phoenix-live-view.hexdocs.pm/Phoenix.LiveView.html" target="_blank" rel="noopener nofollow ugc">Phoenix.LiveView — Phoenix LiveView v1.2.5</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362319" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/74">Post #73</a>
	                </div>
	            </div>
              <div id="likers-container-362319" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362319"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #73"></div>
  </section>
</div>
    <div class="postbit" id="362323" data-post-id="362323">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="AlchemistCamp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/AlchemistCamp/120/8823_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  AlchemistCamp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I did but I didn’t realize they could intercept <code>handle_info</code> and <code>handle_event</code>! This simplifies things a lot. Thanks!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="362323" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-1-8-0-rc-0-released/70256/75">Post #74</a>
	                </div>
	            </div>
              <div id="likers-container-362323" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="362323"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #74"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/70256/load_more?page=8">Load more posts (97 remaining)</a>
</div></template></turbo-stream>