slouchpie

slouchpie

Fellow Elixir devs,

I am about to eat a sandwich and a cup of tea so sorry if this question is badly phrased.

Basically, I am working on app that uses LiveView for every page except for auth pages, which were generated using phx_gen_auth.

Recently, I wanted to use LiveView Hooks to get browser-detected “timezone” as default value in a select field on the registration form, so I started turning it into a LiveView. It actually works fine except that I want to log the user in after they register and the user_auth.ex function to log_in_user requires a Plug.Conn. I know I cannot access the conn from a LiveView so I wonder should I just stop this.

My questions are:

  1. has anyone had any success doing this?
  2. is it a bad idea to use LiveView for this part of the app?

Showing Posts 1 to 5

slouchpie

slouchpie OP

For posterity: I have decided to do this by putting my form in a live view like this:

<%= f = form_for @changeset, Routes.user_registration_path(MyAppWeb.Endpoint, :create), phx_hook: "UserRegistrationForm" %>

and then I just use https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.Helpers.html#live_render/3 in user_registration.html.eex.

this way the liveview doesn’t need access to the conn but i can still get hooks in my registration form.

Note that if you’re doing this you need to pass the changeset using the session option of live_render/3.

LostKobrakai

LostKobrakai

You’ll need classical controllers for everything needing to modify the session. So as you did you can handle the forms in liveview, but they need to submit to a controller. This also kinda means you might need to share some form handling / changeset stuff between the liveview and the controller.

Same goes for logout, which needs to be in a controller given it needs to remove stuff from the session. This however is usually not a problem given it’s often just handled as a link/2 with method: :delete and not a manually created form.

f0rest8

f0rest8

This isn’t specifically about the time zone portion, but I wrote a 2 part guide to modifying your app to turn registration page into a Live View page with phx_gen_auth.

You may only be interested in part 1, the second deals with a multi-part form.

Part 1

Part 2

Hope it helps :heart:

slouchpie

slouchpie OP

I am going even further than this now. I want to turn the “settings” page into a LiveView. Have you done this before? The main problem is that we have to pass a conn struct to UserAuth.log_in_user.

f0rest8

f0rest8

Great to hear! I actually have done that, but I haven’t written a guide on it yet. One way to approach it, as I decided to do, can be figured out by following the archived example from Dashbit’s bytepack_archive.

It’s a bit more complicated than the registration flow since it uses live_component, especially adding the two-factor authentication with their nimble totp library, but it works amazingly.

Then, it’s just expanding on your application a bit to possibly break a single settings page into a Live View page with interactive tabs (tabbed pages) — but that’s just dependent on your app’s preferences.

Oh, lastly, it’s worth noting that it is a similar concept as before (and as @LostKobrakai mentioned), where you interact with your phx_gen_auth generated controllers through your Live View process. Typically, you can just make the swap between conn and socket thanks to how Phoenix is designed.

In a .leex template file all conn references are socket references and vice versa for a .eex template. The Programming Phoenix 1.4 book helps explain how Phoenix handles the connection (and many other things).

I would start by cloning the Bytepack archive, then looking over how they implement their settings page. It’s an incredibly great learning resource.

In the meantime, I’ll post back here if/when I write a Medium guide on it. Good luck! :heart:

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews