Phoenix - 不显示特定控制器操作的Flash消息

时间:2017-05-25 03:10:31

标签: elixir phoenix-framework

page_controller.ex内部,我有一个索引和个人资料操作。

defmodule Kappamon.PageController do
  use Kappamon.Web, :controller

  plug Kappamon.Plugs.RequireLogin when action in [:profile]

  def index(conn, _params) do
    render conn, "index.html"
  end

  def profile(conn, _params) do
    render conn, "profile.html"
  end
end

这两个操作的唯一区别是RequireLogin插件通过选中conn.assigns[:current_user]来检查用户是否已登录。

这是插件:

defmodule Kappamon.Plugs.RequireLogin do
  import Plug.Conn
  import Phoenix.Controller

  alias Kappamon.Router.Helpers

  def init(_opts) do
  end

  def call(conn, _) do
    if conn.assigns[:current_user] do
      conn
    else
      conn
      |> put_flash(:error, "Sorry, you have to be logged in first.")
      |> redirect(to: Helpers.page_path(conn, :index))
      |> halt()
    end
  end
end

当我重定向到put_flash时,:index方法正常工作,但是当我重定向到:profile时,Flash消息为nil

以下是发生问题的控制器操作。

def delete(conn, _param) do
  user = Ecto.Changeset.change(conn.assigns[:current_user],
                               spotify_refresh: nil,
                               spotify_access: nil)

  case Repo.update(user) do
    {:ok, _} ->
      conn
      |> put_flash(:info, "Successfully disconnected from Spotify!")
      |> redirect(to: page_path(conn, :profile))
    {:error, _} ->
      conn
      |> put_flash(:error, "There was an error disconnecting Spotify. Sorry about that.")
      |> redirect(to: page_path(conn, :profile))
  end
end

如果我将:profile更改为:index,则会显示Flash消息。

0 个答案:

没有答案