首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Guardian进行API身份验证测试

使用Guardian进行API身份验证测试
EN

Stack Overflow用户
提问于 2018-04-21 11:46:22
回答 1查看 528关注 0票数 0

我正在试着测试我的控制器,但是我一直遇到一个“未认证”的卫士错误。我想我知道哪里出了问题,但我只是不确定为什么它不能工作。这是我所拥有的。

代码语言:javascript
复制
  setup %{conn: conn} do
    user = insert(:user)
    {:ok, jwt, _} = Guardian.encode_and_sign(user, :api)
    conn = conn
    |> put_req_header("accept", "application/json")
    |> put_req_header("authorization", "bearer: " <> jwt)

    {:ok, conn: conn}
  end

  test "creates and renders resource when data is valid", %{conn: conn} do
    conn = post(conn, league_path(conn, :create), league: @valid_attrs)
    body = json_response(conn, 201)
    assert body["name"]
    assert Repo.get_by(League, name: "Obama's League")
  end

这是正确地创建和签名JWT,但是由于某些原因,它没有在路由器中对其进行身份验证。这是路由器。

代码语言:javascript
复制
pipeline :authenticated do
  plug(Guardian.Plug.EnsureAuthenticated)
end

scope "/api/v1", Statcasters do
  pipe_through([:api, :authenticated])

  resources("/leagues", LeagueController, only: [:create])
end

我认为这就是我出错的地方,因为文档显示,如果不解决这个路由器插头,就会出现这个错误:

错误:

代码语言:javascript
复制
** (RuntimeError) expected response with status 201, got: 401, with body:
     {"errors":["Unauthenticated"]}
     code: body = json_response(conn, 201)

如何在控制器测试中成功使用guardian?

EN

回答 1

Stack Overflow用户

发布于 2020-04-18 04:59:57

尽管您没有在问题中指定您的监护版本,但是对于版本~> 2.0Bearerverify_header插件的默认领域参数。

您应该替换:

代码语言:javascript
复制
|> put_req_header("authorization", "bearer: " <> jwt)

使用

代码语言:javascript
复制
|> put_req_header("authorization", "Bearer " <> jwt)

除非使用,否则您使用bearer:显式定义了verify_header插件

代码语言:javascript
复制
 plug Guardian.Plug.VerifyHeader, realm: "bearer:"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49952167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档