gpt4 book ai didi

elixir - Phoenix 框架插件内的重定向

转载 作者:行者123 更新时间:2023-12-02 02:00:16 26 4
gpt4 key购买 nike

我正在尝试编写一个Plug来验证用户身份(实际检查 session )。我在获取重定向路线时遇到问题。我认为这是因为路由生成发生在该插件激活之后。

无论如何,我遇到了这样的错误:未定义的函数TestApp.page_path/2

在常规上下文中 page_path/2 显然存在并且有效。

defmodule TestApp.Plugs.Authenticate do
import Plug.Conn

def init(default), do: default

def call(conn, _) do
user = Plug.Conn.get_session(conn, :current_user)
if not is_nil(user) do
assign(conn, :user, user)
else
conn
|> Phoenix.Controller.put_flash(:warning, "User is not authenticated.")
|> Phoenix.Controller.redirect(to: TestApp.page_path(conn, :index))
|> halt
end
end

end

最佳答案

路由器助手包含在您的 Controller 中,并通过 web.ex 文件查看:

  def controller do
quote do
use Phoenix.Controller
...
import MyApp.Router.Helpers
end
end

def view do
quote do
use Phoenix.View, root: "web/templates"
...
import MyApp.Router.Helpers
...
end
end

如您所见,controllerview 函数都导入了 MyApp.Router.Helpers 模块。这是定义辅助函数(_pathurl)的地方。

您可以使用完全限定名称:

Phoenix.Controller.redirect(to: TestAppRouter.Helpers.page_path(conn, :index))

或者您可以导入路由助手并仅使用page_path

import MyApp.Router.Helpers
# or
import MyApp.Router.Helpers, only: [page_path: 2]

但是,如果您随后在路由器的管道中使用该插件,则会导致循环依赖,并且您的代码将无法编译。

关于elixir - Phoenix 框架插件内的重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com