you want to create a login form, after user sends his email and password you should send request to a controller (post method) and if this information is right, Phoenix controller refresh the page and create a session for LiveView.
If you send a put_flash form controller to a LiveView page, This message will not be hidden even you navigate to another page until refresh the page, but if you create a put_flash In Live View after navigating it is concealed and has no problem.
On the post which is reported, I captured some videos and I show my problems, but I create a simple video again to show this problem.
Deps:
{:phoenix, "~> 1.6.0"},
{:phoenix_live_view, "~> 0.16.4"} and test master
It should be noted, I had no problem with phoenix LiveView 0.15.7.
Hello,
Can somebody suggest me how can I fix this problem? Or suggest a way around this problem. Thanks!
Temporary patch
you can put_session instead of put_flash, create a tuple like this {:successful_login, created time} and send it to LiveView, after sending you can check the time with current time if their compare are bigger than 5 second you can skip it if not you can show this.
I didn’t test it, but I think it works.
clear_flash restarts the live page, the main problem is why user should see the flash message when he navigates to another menu or page if I use clear_flash in mount it will be restarted and doesn’t show flash message which is bad.
Maybe user doesn’t want to click on flash message to start event to clear it and if he uses it, it is restarted and this is a bad experience.
flash message is deleted but if he navigates to another live page with live redirect, he sees the flash message again
I test it on normal phoenix without any extra code
I think clear_flash just clears the flash message which is created by LiveView not controller put_flash. @josevalim
By the way, :flash is a reserved assign by LiveView, and it cannot be set directly. Use the appropriate flash functions instead.
Controller example:
def index(conn, _params) do
conn
|> put_flash(:info, "after redirecting from a controller to a LiveView:::This put_flash is not going to be hiddend when user navigates with live_redirect")
|> redirect(to: "#{Router.live_path(conn, TestPutFlashWeb.HomeLive)}")
end
Oh, I see now. You’re putting the flash in the conn, but then once you start the LV, you don’t have access to the conn anymore. Perhaps instead of putting the flash there, you could add a URL param (e.g. ?show_flash=true) to the live redirect, and then match on that in handle_params to add the flash message to the socket instead.
This is a second solution that I have already thought about!, but my users can put it on my project URL and show this (flash) every time they want, I know it has no problem for me as security problem.
After updating to phoenix 1.6 and LiveView 0.16.1, when my controller sends user to live side of my project with put_flash and redirect, the flash message is not cleared when user navigate to another pages. But this problem does not exist in the previous version.
It should be noted, I have no problem before 0.16.0. I think it is better to be fixed in Phoenix LiveView lib.
By the way, Phoenix LiveView puts the conn flash into assgns
@shahryarjb please realize in response to me asking to not ping the maintainers, you came here and… pinged the maintainers! (me) , which sends an email to my inbox. We are tracking it. The best you can do is standby or submit a PR if you’re wanting to expedite the process
Please avoid pinging the issues for updates since it adds noise to our maintainer workload. I understand you may be encountering issues, but rest assured if it’s here and open, it’s on our list to review/assess/fix. Thanks!
Yes, I am very sorry sir , but I didn’t know how you can track the issues, after days I think you forgot this issue and I don’t want to ping you I just need a help or get explanation of you even less, maybe I can fix it and send a PR.
This is a great pride for me to send a PR if I can to a project helped me to learn programming.
Please do not be upset, and thank you for all works you did
Yeah I get, especially if you’re hitting an issue that you need fixed to accomplish your goals. Just keep in mind, repeatedly pinging maintainers in all available avenues (twitter, forums, GH) is inversely correlated with us prioritizing an issue
It sounds like a bug but I have not had the time to reproduce on my side. Also the comments about it “resetting” the LiveView makes it appear you also have some crashes on your end. We’ve been hard at work prepping some big features for 0.17, so once that and ElixirConf settles, I should have bandwidth to take a look at other issues.