gae*_*ard 6 elixir phoenix-framework
在控制器内部,我正在检查连接的会话以验证会话是否附加到用户.如果没有,我将其重定向到另一页.
但该halt回报我的错误,如果我尝试重定向后调用它:
在Plug.Conn.halt/1中没有匹配的函数子句
如果没有halt原始控制器的页面,则在控制台中执行渲染并打印错误(模板在没有用户的情况下呈现):
(exit)引发异常:(UndefinedFunctionError)undefined function:nil.username/0
所以我的问题是:是否可以halt在重定向后调用?
这是我的控制器的代码和它中使用的模块.
defmodule Mccm.DashboardController do
use Mccm.Web, :controller
import Mccm.Plug.Session
import Mccm.Session, only: [current_user: 1]
plug :needs_to_be_logged_in
def index(conn, _params) do
conn
|> render "index.html", user: current_user(conn)
end
end
Run Code Online (Sandbox Code Playgroud)
defmodule Mccm.Plug.Session do
import Mccm.Session, only: [logged_in?: 1, is_teacher?: 1]
import Phoenix.Controller, only: [redirect: 2]
import Plug.Conn, only: [halt: 1]
def needs_to_be_logged_in(conn, _) do
if !logged_in?(conn) do
conn
|> redirect to: "/"
|> halt # this give me an error
else
conn
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是使用的依赖项:
编辑在 Elixir 的 master 分支上,如果有参数,如果将函数通过管道输送到没有括号的情况下,编译器将发出警告。
尝试做:
def needs_to_be_logged_in(conn, _) do
if !logged_in?(conn) do
conn
|> redirect(to: "/") # notice the brackets
|> halt # this give me an error
else
conn
end
end
Run Code Online (Sandbox Code Playgroud)
你的代码正在做:
|> redirect(to: "/", |> halt)
Run Code Online (Sandbox Code Playgroud)
并且错误正确地识别出没有以下模式:
halt(to: "/")
Run Code Online (Sandbox Code Playgroud)
请参阅为什么我无法链接 String.replace?以获得更详细的解释。
| 归档时间: |
|
| 查看次数: |
1650 次 |
| 最近记录: |