Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

111
Visualizações
Valor de paso de elixir durante la redirección

La función de inicio de sesión debe tomar la variable proporcionada por el usuario en el formulario y luego verificar si el usuario dado existe en la base de datos. En caso afirmativo, será redirigido al sitio principal, si no, será redirigido al mismo formulario para enviar nuevamente su nombre. tengo dos problemas

  1. Ambas funciones put_flash no funcionan.
  2. No sé cómo pasar valores adicionales desde el inicio de sesión (mientras que la redirección hay un valor de userp: userp, que no se proporciona en :main, y no en el renderizado en :main). ¿Cómo podría agregar estos argumentos adicionales? En este momento solo mantiene el nombre de usuario, pero más adelante quiero que maneje toda la especificación de usuario de la base de datos (está funcionando en este momento). A continuación se muestra el código

función de inicio de sesión:

 def login(conn, %{"user" => userp}) do changeSet = RewardappWeb.User.changeset(%RewardappWeb.User{}, userp) #IO.inspect(userp) users = Rewardapp.Repo.all(RewardappWeb.User) #IO.inspect(changeSet) #VALIDATION, IF GIVEN USER BELONGS TO DATABASE value = userp["user"] #map of lists listOfUsers = Rewardapp.Repo.all(RewardappWeb.User) IO.inspect(Enum.find(listOfUsers, fn x -> x.name == value end)) userSpec = Enum.find(listOfUsers, fn x -> x.name == value end) IO.inspect(userSpec) case userSpec do nil -> put_flash(conn, :error, "Could not find the user") #render(conn, "index.html", users: users, changeSet: changeSet) redirect(conn, to: Routes.grant_path(conn, :index), users: users, changeSet: changeSet) _ -> put_flash(conn, :info, "Logged in") #render(conn, "start.html", changeSet: changeSet, users: users, userp: userp) redirect(conn, to: Routes.grant_path(conn, :main), users: users, changeSet: changeSet, userp: userp) end end

función principal:

 def main(conn, params) do changeSet = RewardappWeb.User.changeset(%RewardappWeb.User{}, %{}) users = Rewardapp.Repo.all(RewardappWeb.User) render(conn, "start.html", changeSet: changeSet, users: users) end

función de índice:

 def index(conn, params) do changeSet = RewardappWeb.User.changeset(%RewardappWeb.User{}, %{}) render(conn, "index.html", changeSet: changeSet) end

el router.ex se ve así:

 get "/main", GrantController, :main get "/", GrantController, :index post "/users", GrantController, :login

Gracias de antemano por cualquier ayuda!!!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Elixir es un lenguaje funcional. No puede mutar "clases" en su lugar y luego usarlas después de la mutación, ni nada por el estilo.

 case userSpec do nil -> put_flash(conn, :error, "Could not find the user") redirect(conn, to: Routes.grant_path(conn, :index), users: users, changeSet: changeSet) # ... end

Su put_flash(conn, ...) conn una conexión modificada y la arrojará al éter.

Luego, la llamada de redirect(conn, ...) modificará la conn original (la que no tiene flash, no la que tiene flash) y eso es lo que su función de inicio de sesión realmente termina devolviendo.

Es por eso que la redirección funciona, pero no hay plash: no se agregó a la conexión que está devolviendo.

Así que lo que quieres hacer es algo como

 case userSpec do nil -> conn |> put_flash(:error, "Could not find the user") |> redirect(to: Routes.grant_path(conn, :index), users: users, changeSet: changeSet) # ... end

Es decir, agrega el flash a la conexión, luego redirige el resultado, y eso es lo que su función debería devolver.

Espero que eso ayude.

En cuanto a agregar argumentos adicionales a la redirección, depende de lo que desee agregar. Si se trata de parámetros de consulta, entonces podría hacer

 path = Routes.grant_path(conn, :index, %{"foo" => "bar"}) redirect(conn, to: path)

La otra forma de agregar datos sería ponerlos en sesión.

Supongo que lo que realmente quiere es agregar datos que luego se usan en el html que está representando. La redirección no funciona de esa manera. Básicamente le dice al navegador, vaya a esta otra ubicación y realice el proceso de solicitud desde el principio.

En algunos casos, es posible que pueda representar una plantilla de vista diferente, en lugar de redirigir y lograr lo que desea.

 render(conn, "index.json", user: user, changeset: changeset)

Pero si eso es posible aquí realmente depende de su caso específico.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda