2016-03-03 6 views
7

Ich versuche Guardian in meine API zu implementieren und führen Sie eine Anmeldung durch, um JWT zurück zu bekommen. Das Tutorial, das ich sehe, ist here. Das Problem besteht darin, die Anmeldung mit einem Benutzermodell zu implementieren, das dem im Beispiel ähnelt. Das Modell Code wie folgt aussieht:Protokoll Ecto.Queryable nicht implementiert für

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 

Wenn ich die from_email rufen entweder aus Phoenix oder gerade in iex -S mischen, bekomme ich folgende Fehlermeldung:

user = PushflightServer.User.from_email („[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

ich muss fehlen etwas einfach, aber ich habe nicht in der Lage gewesen, eine Dokumentation darüber zu erfahren, warum dies geschieht. Das Einfügen der Daten mit dem Repo hat gut funktioniert. Irgendwelche Ideen?

Antwort

3

Ich glaube, Sie müssen vollständig User als PushflightServer.User zu Namespace oder Sie die Verknüpfung verwenden können __MODULE__

2

sollten Sie die Module mit Namensräumen Referenz

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