标签: guardian

使用 Guardian 进行控制器测试

我已经在我的应用程序中验证了路由,现在我开始使用控制器测试这些端点。但我首先需要授权我的请求,然后才能测试 API 端点。这是我的测试:

  setup %{conn: conn} do
    {:ok, conn: put_req_header(conn, "accept", "application/json")}
  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 
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该测试时,出现以下错误:

expected response with status 201, got: 401, with body:
 {"errors":["Unauthenticated"]}
Run Code Online (Sandbox Code Playgroud)

路由器:

pipeline :authenticated do
  plug(Guardian.Plug.EnsureAuthenticated)
end

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

  resources("/users", UserController, except: [:create])
  resources("/leagues", LeagueController, only: [:create])
end
Run Code Online (Sandbox Code Playgroud)

所以我试图create在我的 LeagueController …

elixir jwt phoenix-framework guardian

3
推荐指数
1
解决办法
860
查看次数

监护人数据库未将记录插入数据库

我的混合文件包含

{:guardian, "~> 1.0"},
{:guardian_db, "~> 1.1"},
Run Code Online (Sandbox Code Playgroud)

和配置包含

config :my_app, MyApp.Guardian,
   issuer: "my_app",
   ttl: {30, :days},
   allowed_drift: 2000,
   verify_issuer: true,

  #  mix guardian.gen.secret (to get a key for dev and prod envs)
   secret_key: "yKwVGXFyH6nbiE+ELRMLYjCDC3QughF02LN+xPlB7z2loDKeNuBJ6RIUdTMBul23"

config :guardian, Guardian.DB,
   repo: Qserv.BaseRepo,
   schema_name: "sessions", # default
   token_types: ["refresh_token"], # store all token types if not set
   sweep_interval: 60
Run Code Online (Sandbox Code Playgroud)

我的应用程序有这条线

worker(Guardian.DB.Token.SweeperServer, []),
Run Code Online (Sandbox Code Playgroud)

和我的会话表迁移

defmodule MyApp.Repo.Migrations.CreateTable.Auth.Sessions do
  use Ecto.Migration

  @table :sessions

  def change do
    create table(@table, primary_key: false) do
      add :jti, :string, primary_key: …
Run Code Online (Sandbox Code Playgroud)

configuration elixir phoenix-framework guardian guardian-db

1
推荐指数
1
解决办法
284
查看次数

Plug.Conn.resp/3 中没有匹配的函数子句

在使用 Guardian 验证针对 JWT 令牌的 GET 请求后,我尝试使用 JSON 进行响应。

我的测试:

  describe "Show user if authenticated" do
    setup %{conn: conn} do
      {:ok, %User{} = user} = Riders.create_user(@create_attrs)
      {:ok, jwt, claims} = Bikefit.Guardian.encode_and_sign(user)
      IO.inspect claims
      conn = put_req_header(conn, "authorization", "Bearer #{jwt}")
      {:ok, conn: conn, user: user}
    end

    test  "and return user if token is valid", %{conn: conn, user: user} do
      email = user.email
      conn = get conn, current_user_path(conn, :current)
      response = json_response(conn, 200)
      IO.puts "---------- test response--------"
      IO.inspect response
      assert %{"email" => …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework guardian

1
推荐指数
1
解决办法
2399
查看次数