چطور در فونیکس به همراه ریدایرکت سشن را نیز ارسال کنم؟


#1

درود خدمت شما . من یک Fallback دارم که وقتی اروری رو دریافت کردم به صفحه ای نیازمندم می فرستم به صورت مثال وقتی که ارور ۴۰۴ دریافت کردم

def call(conn, {:ok, %HTTPoison.Response{status_code: 404, body: _body}}) do
      conn
      |> put_flash(:info, "متاسفانه صفحه ای که به دنبال آن هستید وجود ندارد.")
      |> redirect( to: "/404")
    end

همانطور که می بینید بنده سعی کردم یک put_flash درست کنم و همراه ریدایرکت بفرستم و در صفحه ۴۰۴ ارورم که به شرح زیر هست نمایش بدم

<!-- /web/templates/error/404.html.eex -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>403 - Page Not Found</title>
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
  </head>

  <body>
   <%= if Phoenix.Controller.get_flash(@conn, :info) do %>
    <div class="clearfix"> </div>
    <div class="speacer40"></div>
      <div class="alert alert-warning alert-dismissible fade show container rtl-m" role="alert">
        <%= Phoenix.Controller.get_flash(@conn, :info) %>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
    <% end %>
    <h1>403 - Page Not Found</h1>
    <p>This isn't the page you were looking for.</p>
  </body>
</html>

ولی متاسفانه انگار اصلا سنشن ارسال نمی شه که من بتونم بگیرمش و ارور

** (exit) an exception was raised:
    ** (ArgumentError) flash not fetched, call fetch_flash/2
        (phoenix) lib/phoenix/controller.ex:1236: Phoenix.Controller.get_flash/1
        (phoenix) lib/phoenix/controller.ex:1250: Phoenix.Controller.get_flash/2

دارم


#2

من از فونیکس چیزی نمی دونم اما خوب کوکی یا JWT اینجا می تونه خیلی کمک کنه بهت


#3

متاسفانه سمیر جان چون اینجا فقط یک تمپلیت هست و کنترلر نداره اون اصل دستورات من اجرا نمی شه که حتی بتونم کوکی که درست کردم یا سشنی که درست شده رو بتونم بگیرم . یعنی اصل مشکلم اینجاست


#4

دوستان من اومدم در view خودم برای گرفتن سشن use TrangellHtmlSiteWeb, :controller اد کردم مشکلم حل شد. تونستم سشن رو در ۴۰۴.html بگیرم به نظرتون کارم درست است؟

مثل اینکه توهم زدم درست نشد :expressionless: چون این صفحه اصلا جزو روتر نیست بخاطر همین اصلا توش سشن یا کوکی رو نمی گیره


#5

راه حل جدیدی به صورت اتفاقی براش پیدا کردم به زودی یک مقاله در موردش می نویسم . خیلی ساده هست

بجای اینکه بفرستمش در یک روتری که وجود نداره صفحه ۴۰۴ رو در همون تمپلیت رندر می کنم