使用Guardian 1和Phoenix 1.3验证id

时间:2017-11-19 11:40:01

标签: elixir jwt phoenix-framework guardian

我使用Guardian 1和Phoenix 1.3。我正在尝试制作一个使用JWT的API。我现在有路由的身份验证。例如,如果标头中没有有效的令牌,则无法访问get api/users/

我的管道看起来像:

defmodule PhxAuthApi.Auth.AuthPipeline do

  use Guardian.Plug.Pipeline, otp_app: :phx_auth_api,
    module: PhxAuthApi.Auth.Guardian,
    error_handler: PhxAuthApi.Auth.AuthErrorHandler

  plug Guardian.Plug.VerifyHeader, claims: %{"typ" => "access"}, realm: :none
  plug Guardian.Plug.EnsureAuthenticated
  plug Guardian.Plug.LoadResource, ensure: true

end

我想要实现的是,如果用户在令牌资源中具有相应的put api/users/1,则仅:id的用户才能访问该路由。 我知道我可以通过调用

来获取资源
resource = Guardian.Plug.current_resource(conn)

但是我该怎么做呢?制作另一条管道?

看起来怎么样,我找不到任何关于实现这个目标的文件?

我是Elixir和Phoenix的新手,这是我打算发布的第一个项目。

1 个答案:

答案 0 :(得分:0)

最简单的方法是在Guardian.Plug.LoadResource之后创建另一个要包含在同一管道中的Plug

此时资源已加载,您需要的是实现call回调以拒绝访问,除非用户在其令牌资源中具有相应的:id