Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- defmodule WarehouseWeb.UserController do
- use WarehouseWeb, :controller
- alias Warehouse.Account
- alias Warehouse.Account.User
- action_fallback WarehouseWeb.FallbackController
- def index(conn, _params) do
- users = Account.list_users()
- render(conn, "index.json-api", data: users)
- end
- # ... ...
- end
- defmodule WarehouseWeb.Router do
- use WarehouseWeb, :router
- pipeline :api do
- plug :accepts, ["json", "json-api"]
- end
- pipeline :api_auth do
- plug WarehouseWeb.Guardian.AuthPipeline
- end
- scope "/api", WarehouseWeb do
- pipe_through :api
- post "/register", RegistrationController, :create
- post "/token", SessionController, :create, as: :login
- end
- scope "/api", WarehouseWeb do
- pipe_through :api_auth
- resources "/users", UserController, except: [:new, :edit]
- end
- end
- defmodule WarehouseWeb.Guardian.AuthPipeline do
- use Guardian.Plug.Pipeline, otp_app: :warehouse,
- module: WarehouseWeb.Guardian,
- error_handler: WarehouseWeb.Guardian.AuthErrorHandler
- plug Guardian.Plug.VerifyHeader
- plug Guardian.Plug.EnsureAuthenticated
- end
- defmodule Warehouse.Guardian do
- use Guardian, otp: :warehouse,
- secret_key: "some secret"
- def subject_for_token(resource, _claims) do
- {:ok, to_string(resource.id)}
- end
- def resource_from_claims(claims) do
- user = Warehouse.Account.get_user!(claims["sub"])
- {:ok, user}
- end
- end
- defmodule WarehouseWeb.Guardian.AuthErrorHandler do
- import Plug.Conn
- def auth_error(conn, {type, reason}, opts) do
- IO.inspect "authentication is not working!!"
- body = Poison.encode!(%{message: to_string(type)})
- send_resp(conn, 401, body)
- end
- end
- defmodule WarehouseWeb.UserControllerTest do
- use WarehouseWeb.ConnCase
- alias Warehouse.Account
- alias Warehouse.Account.User
- @create_attrs %{email: "some email", firstname: "some firstname", lastname: "some lastname", password: "some password"}
- @update_attrs %{email: "some updated email", firstname: "some updated firstname", lastname: "some updated lastname", password: "some updated password"}
- @invalid_attrs %{email: nil, firstname: nil, lastname: nil, password: nil}
- def fixture(:user) do
- {:ok, user} = Account.create_user(@create_attrs)
- user
- end
- setup %{conn: conn} do
- # create user to be logged in
- {:ok, user} = Account.create_user(%{email: "gg@ex.com", real_password: "abc123", real_password_confirmation: "abc123"})
- # create token for session
- {:ok, jwt, _claims} = Account.authenticate(%{user: user, password: "abc123"})
- # add authorization header to the request
- conn = conn
- |> put_req_header("authorization", "Bearer: #{jwt}")
- |> put_req_header("accept", "application/json")
- {:ok, %{conn: conn, user: user}}
- end
- describe "index" do
- test "lists all users", %{conn: conn} do
- conn = get conn, user_path(conn, :index)
- assert json_response(conn, 200)["data"] == []
- end
- end
- end
Add Comment
Please, Sign In to add comment