2016-03-03 28 views
7

için uygulanmadı Guardian'ı benim API'ma uygulamaya çalışıyorum ve JWT'yi geri almak için bir giriş yapın. Baktığım öğretici here. Sorun, örnekte kullandıkları şeye benzer bir Kullanıcı Modeli kullanarak oturum açmayı gerçekleştirmektir. gibi Model kodu görünür:protokolü Ecto.Queryable

kullanıcıyı = PushflightServer.User.from_email:

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 

Ben IEX -S karıştırın Phoenix içinden veya düz ya FROM_EMAIL çağırırsanız, aşağıdaki hatayı alıyorum ("[email protected]")

** (Protocol.UndefinedError) protocol Ecto.Queryable not implemented for User, the given module does not exist (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

basit bir şey eksik olmalı, ama bu neden oluyor herhangi bir belgelerine bulmak mümkün olmamıştır. Repo kullanarak verilerin eklenmesi iyi çalıştı. Herhangi bir fikir?

cevap

3

Ben tam PushflightServer.User olarak User ad alanı gerek yoksa __MODULE__

2

İsim alanları ile modüllerini başvuruda bulunmalıdır kısayol kullanabilirsiniz

def from_email(email) do 
    PushflightServer.one(PushflightServer.User, email: email) 
    end