그래서 일부 오류 처리 및 사용자가 응답을 보내도록 인증되지 않은 경우 플러그를 만들려고합니다. 그래서send_resp에서 데이터를 가져 오는 데 문제가 발생했습니다.
def unauthorized(conn) do
respond(conn, response_type(conn), 401, "Unauthorized")
end
defp response_type(conn) do
accept = accept_header(conn)
if Regex.match?(~r/json/, accept) do
:json
else
:html
end
end
defp accept_header(conn) do
value = conn
|> get_req_header("accept")
|> List.first
value || ""
end
defp respond(conn, :json, status, msg) do
try do
conn
|> put_resp_content_type("application/json")
|> send_resp(status, Poison.encode!(%{errors: msg}))
|> IO.inspect
|> halt
rescue ArgumentError ->
conn
|> put_resp_content_type("application/json")
|> send_resp(status, Poison.encode!(%{errors: [msg]}))
|> halt
end
end
거의 노력하는
상태를보고있다 검사 : 여기 내 코드입니다 : 전송, 상태 : 전송에 401
하지만, 전송 결코 내 에러 메시지.
두 번째 질문은 error_view.ex 파일에 많은 템플릿을 저장하고 피닉스의 렌더링을 사용하고 싶습니다.
매크로가 을 사용하여 명명 규칙을 선택하면을 사용하여 다른 모듈에서 특정 뷰의 렌더링을 강제로 수행 할 수있는 방법이 있습니까?
저는 Elixir에 상당히 익숙해졌습니다. 도움에 감사드립니다!
편집 :
그래서 나는 put_view을 발견하지만 그 일을 내가 200
이외의 오류 코드가있을 때 내가 어떤 오류 코드를한다면, 그것은 보이지 않는 보이지 않는다 메시지를 다시 보내려면이 플러그 만 사용해야합니다. 내가 put_status을 다른 컨트롤러에서 사용한다면 완전히 정상적으로 작동하지만 여기서는 작동하지 않습니다. 그것이 실패합니다 아무것도 인 경우에,
defp respond(conn, :json, status, msg) do
try do
conn
|> put_resp_content_type("application/json")
#|> send_resp(status, Poison.encode!(%{errors: msg}))
|> put_status(status)
|> put_view(ChatApp.Web.UsersView)
|> render("error_user_creation.json", string: msg)
|> IO.inspect
|> halt
rescue ArgumentError ->
conn
|> put_resp_content_type("application/json")
|> send_resp(status, Poison.encode!(%{errors: [msg]}))
|> halt
end
end
그것은 그러나 나는 오랫동안이 (200)의 상태의로를 통해 전송하고 올바른 몸을 보내는 :
여기에 새로운 코드입니다.
편집, 편집 :
내 코드는 200 상태 코드가 완벽하게 합리적으로 실행되지만 다른 뭔가를 넣어 때, 그것은 나누기 :
그것은 다음과 같이 호출되는 것 :
case Accounts.check_token(List.first(token)) do
{:ok, user} ->
conn
|>GeneralUtils.put_private(:user, user)
|> AuthResponses.unauthorized
:error ->
conn
|> GeneralUtils.put_private(:error, {:error, "You do not have permissions"})
end
또한이 AuthResponses.unauthorized가 오류 상태 여야 함을 알고 있습니다. 현재 테스트 중이며 더 쉽습니다.
요청 형식을 얻기위한'Phoenix.Controller.get_format/1' 함수가 있습니다. (수락 플러그는 conn에 당신을 위해 형식을 넣을 것입니다) – sysashi
쿨! 내 response_type을 get_format 함수로 업데이트했습니다. 감사! –