【问题标题】:Validating id with Guardian 1 and Phoenix 1.3使用 Guardian 1 和 Phoenix 1.3 验证 id
【发布时间】:2018-05-02 18:00:53
【问题描述】:

我使用 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

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

resource = Guardian.Plug.current_resource(conn)

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

看起来怎么样,我找不到任何关于实现这一点的文档?

我对 Elixir 和 Phoenix 还很陌生,这是我打算发布的第一个项目。

【问题讨论】:

    标签: elixir jwt phoenix-framework guardian


    【解决方案1】:

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

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

    【讨论】:

    • 能否请您添加一个如何实现此目的的示例?
    • 我链接的Plug 的文档页面包含an example:如果不满足条件,则仅来自Plug.call/2send_resp(conn, 403, "Access Denied")
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2018-01-28
    相关资源
    最近更新 更多