okay maybe i share the code
my sessioncontoller.ex
defmodule MyApp.SessionController do
use MyApp.Web, :controller
alias MyApp.User
import Comeonin.Bcrypt, only: [checkpw: 2, dummy_checkpw: 0]
def new(conn, _params) do
render conn, "new.html"
end
def create(conn, %{"session" => %{"email" => email, "password" => password}}) do
case verify_credentials(email, password) do
{:ok, user} ->
conn
|> put_flash(:info, "Successfully signed in")
|> Guardian.Plug.sign_in(user)
|> redirect(to: profile_path(conn, :index))
{:error, _reason} ->
conn
|> put_flash(:error, "Invalid email address or password")
|> render("new.html")
end
end
def delete(conn, _params) do
conn
|> Guardian.Plug.sign_out()
|> put_flash(:info, "Successfully signed out")
|> redirect(to: "/")
end
defp verify_credentials(email, password) when is_binary(email) and is_binary(password) do
with {:ok, user} <- find_by_email(email),
do: verify_password(password, user)
end
defp find_by_email(email) when is_binary(email) do
case Repo.get_by(User, email: email) do
nil ->
dummy_checkpw()
{:error, "User with email '#{email}' not found"}
user ->
{:ok, user}
end
end
defp verify_password(password, %User{} = user) when is_binary(password) do
if checkpw(password, user.password_hash) do
{:ok, user}
else
{:error, :invalid_password}
end
end
end
my pipeline in the router
pipeline :browser_session do
plug Guardian.Plug.VerifySession
plug Guardian.Plug.LoadResource
plug MyApp.GetUser
end
and my plug
defmodule MyApp.GetUser do
import Plug.Conn
alias MyApp.Repo
alias MyApp.User
def init(opts) do
opts
end
def call(conn, _opts) do
current_user = Guardian.Plug.current_resource(conn)
assign(conn, :current_user, current_user)
end
end
Actually the error is am directed to a page stating INTERNAL SERVER ERROR