Elixir Guardian允许用户访问控制器,即使当前用户为零?

Elixir Guardian允许用户访问控制器,即使当前用户为零?,elixir,phoenix-framework,guardian,Elixir,Phoenix Framework,Guardian,如果用户发送的令牌未过期,但该特定用户已不存在,Guardian仍允许用户访问控制器 我在current_user.ex中添加了{:ok,nil},它只是终止了连接,我认为这不是正确的方法,因为我需要向用户返回一些东西,比如错误。我不确定我应该在那里用什么 这是我的路由器: pipeline :authed_api do plug :accepts, ["json"] plug Guardian.Plug.VerifyHeader, realm: "Bearer" pl

如果用户发送的令牌未过期,但该特定用户已不存在,
Guardian
仍允许用户访问控制器

我在
current_user.ex
中添加了
{:ok,nil}
,它只是终止了连接,我认为这不是正确的方法,因为我需要向用户返回一些东西,比如错误。我不确定我应该在那里用什么

这是我的路由器:

 pipeline :authed_api do
    plug :accepts, ["json"]
    plug Guardian.Plug.VerifyHeader, realm: "Bearer"
    plug Guardian.Plug.EnsureAuthenticated, handler: Web.GuardianErrorHandler 
    plug Guardian.Plug.LoadResource
    plug Web.CurrentUser, handler: Web.GuardianErrorHandler  
  end

 scope "/api/v1", Web do
    pipe_through :authed_api

    get "/logout", UserController, :logout
    resources "/users", UserController
    get "/*get", ErrorController, :handle_redirect
  end
这是我的
当前用户

defmodule Web.CurrentUser do
    import Plug.Conn
    import Guardian.Plug
    import Web.GuardianSerializer
    def init(opts), do: opts
    def call(conn, _opts) do
      current_token = Guardian.Plug.current_token(conn)
      case Guardian.decode_and_verify(current_token) do
        {:ok, claims} ->
          case Web.GuardianSerializer.from_token(claims["sub"]) do
            {:ok, nil} ->
              conn = Plug.Conn.halt(conn) # <-this line, I was referring to
            {:ok, user} ->
              Plug.Conn.assign(conn, :current_user, user)
            {:error, _reason} ->
              conn
          end
        {:error, _reason} ->
          conn
      end
    end
  end
defmodule Web.CurrentUser do
进口插头
导入守护者
导入Web.guarderserializer
def初始化(选项),do:opts
def呼叫(连接,选择)do
当前\u令牌=监护人.插头.当前\u令牌(conn)
案例监护人。解码并验证(当前令牌)do
{:好的,索赔}->
案例Web.guardersializer.from_token(索赔[“子”])do
{:好的,无}->
连接=插头连接停止(连接)#
Plug.Conn.assign(Conn,:当前用户,用户)
{:错误,{u原因}->
康涅狄格州
终止
{:错误,{u原因}->
康涅狄格州
终止
终止
终止
先谢谢你

它只是终止了连接

这是因为您正在
conn
上调用的是
halt
。您需要在停止之前发送响应。下面是如何发送一个403禁止响应,文本为“禁止”:

{:ok, nil} ->
  conn |> send_resp(403, "Forbidden") |> Plug.Conn.halt()