【发布时间】:2016-06-16 05:38:44
【问题描述】:
我正在尝试在我的 API 中实现 Guardian 并通过它执行登录以获取 JWT。我正在看的教程是here。问题是使用类似于他们在示例中使用的用户模型来实现登录。模型代码如下所示:
defmodule PushflightServer.User do
use PushflightServer.Web, :model
use Ecto.Repo
import Ecto.Query
alias PushflightServer.Repo
schema "users" do
field :name, :string
field :email, :string
field :encrypted_password, :string
field :password, :string, virtual: true
field :verify_token, :string
field :verify_date, Ecto.DateTime
timestamps
end
def from_email(nil), do: { :error, :not_found }
def from_email(email) do
IO.write("Before email")
IO.inspect(email)
Repo.one(User, email: email)
end
如果我从 Phoenix 内部或直接在 iex -S mix 中调用 from_email,我会收到以下错误:
user = PushflightServer.User.from_email("rob@json.com")
** (Protocol.UndefinedError) 协议 Ecto.Queryable 未为用户实现,给定模块不存在 (ecto) lib/ecto/queryable.ex:33: Ecto.Queryable.Atom.to_query/1 (ecto) lib/ecto/repo/queryable.ex:90: Ecto.Repo.Queryable.execute/5 (ecto) lib/ecto/repo/queryable.ex:15: Ecto.Repo.Queryable.all/4 (ecto) lib/ecto/repo/queryable.ex:44: Ecto.Repo.Queryable.one/4
我一定遗漏了一些简单的东西,但我找不到任何关于为什么会发生这种情况的文档。使用 Repo 插入数据工作正常。有什么想法吗?
【问题讨论】:
标签: elixir phoenix-framework ecto