首页 > 解决方案 > Phoenix - ProjWeb.UserController.sign_in/2 中没有函数子句匹配

问题描述

我已经定义了以下路线 router.ex

    scope "/api/v1", ProjWeb do
        pipe_through :api

        post "/sign_up", UserController, :sign_up
        post "/sign_in", UserController, :sign_in

      end

这是控制器动作

def sign_up(conn, %{"user" => user_params}) do
 # example code
 # response
end

def sign_in(conn, %{"user" => %{"email" => email, "password" => password}}) do  
 ### resp
end

/api/v1/sign_up使用以下有效负载

{
    "user": {
        "email": "krishna@example.com",
        "name": "Krishna",
        "password": "SUPER_SECRET_PASS!"
    }
}
/api/v1/sign_in

具有以下有效载荷

{
    "user": {
        "email": "krishna@example.com",
        "password": "SUPER_SECRET_PASS!"
    }
}

抛出以下错误

no function clause matching in ProjWeb.UserController.sign_in/2

日志:

 # 1
   %Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, before_send:...}
   # 2
   %{}

标签: elixirphoenix-framework

解决方案


您的有效负载似乎没有正确通过,因为您传递的第二个参数是一个空映射(请参阅日志)。由于您的sign_in函数需要一个带有user键的结构,因此它无法匹配您的调用。


推荐阅读