Hi Folks,
I am trying to add a custom authorisation plug to my router, and I am getting an error in VSCode for the following code, and I can’t really work out why it’s complaining, been staring at this for a couple go hours now and was wondering if anyone could put me out of my misery?
Here’s the code, it’s pretty basic stuff.
def require_admin_user(%{current_user: current_user} = conn, _opts) do
if current_user.admin do
conn
else
conn
|> put_flash(:error, "You must log in to access this page.")
|> maybe_store_return_to()
|> redirect(to: Routes.user_session_path(conn, :new))
|> halt()
end
end
def require_admin_user(conn, _opts) do
conn
|> put_flash(:error, "You must log in to access this page.")
|> maybe_store_return_to()
|> redirect(to: Routes.user_session_path(conn, :new))
|> halt()
end
It’s the conn in the else of the def require_admin_user(%{current_user: current_user} = conn, _opts) function that it’s complaining about:
The call 'Elixir.Phoenix.Controller':put_flash
(_conn@1 :: #{'current_user' := _, _ => _},
'error',
<<89,111,117,32,109,117,115,116,32,108,111,103,32,
105,110,32,116,111,32,97,99,99,101,115,115,32,
116,104,105,115,32,112,97,103,101,46>>) will never return since it differs in the 1st argument from the success typing arguments:
(#{'__struct__' := 'Elixir.Plug.Conn',
'adapter' := {atom(), _},
'assigns' := #{atom() => _},
'body_params' :=
#{'__struct__' => 'Elixir.Plug.Conn.Unfetched',
'aspect' => atom(),
binary() => _},
'cookies' :=
#{'__struct__' => 'Elixir.Plug.Conn.Unfetched',
'aspect' => atom(),
binary() => _},
'halted' := boolean(),
'host' := binary(),
'method' := binary(),
'owner' := pid(),
'params' :=
#{'__struct__' => 'Elixir.Plug.Conn.Unfetched',
'aspect' => atom(),
binary() => _},
'path_info' := [binary()],
'path_params' :=
#{binary() =>
binary() |
[binary() | [any()] | map()] |
#{binary() => binary() | [any()] | map()}},
'port' := char(),
'private' := #{atom() => _},
'query_params' :=
#{'__struct__' => 'Elixir.Plug.Conn.Unfetched',
'aspect' => atom(),
binary() =>
binary() |
[binary() | [any()] | map()] |
#{binary() => binary() | [any()] | map()}},
'query_string' := binary(),
'remote_ip' :=
{byte(), byte(), byte(), byte()} |
{char(),
char(),
char(),
char(),
char(),
char(),
char(),
char()},
'req_cookies' :=
#{'__struct__' => 'Elixir.Plug.Conn.Unfetched',
'aspect' => atom(),
binary() => binary()},
'req_headers' := [{binary(), binary()}],
'request_path' := binary(),
'resp_body' :=
'nil' |
binary() |
maybe_improper_list(binary() |
maybe_improper_list(any(),
binary() | []) |
byte(),
binary() | []),
'resp_cookies' := #{binary() => map()},
'resp_headers' := [{binary(), binary()}],
'scheme' := 'http' | 'https',
'script_name' := [binary()],
'secret_key_base' := 'nil' | binary(),
'state' :=
'chunked' | 'file' | 'sent' | 'set' | 'set_chunked' |
'set_file' | 'unset',
'status' := 'nil' | non_neg_integer()},
atom() | binary(),
any())