首页 > 解决方案 > Access Conn 在 Drab 中分配值

问题描述

我正在浏览Drab Live文档,但仍然无法访问Drab指挥官套接字中的 conn 分配。我正在使用最新版本:{:drab, "~> 0.9.3"}.

为什么在IO.puts(user)下面返回nil


单调的指挥官:

defmodule ReviewsWeb.PageCommander do
  use Drab.Commander
  import Ecto.Query
  import Ecto.Changeset
  import ReviewsWeb.Authorize
  import Plug.Conn
​
​
  defhandler like(socket, sender) do
    user = Drab.Core.get_session(socket, :current_user)
    IO.puts(user)
    IO.puts "Hello World!"
  end
end

​: config.exs ​</p>

config :drab, Reviews.Repo,
  otp_app: :reviews
​
config :drab, enable_live_scripts: true
​
config :phoenix, :template_engines,
  drab: Drab.Live.Engine
​
config :drab, ReviewsWeb.Endpoint,
  otp_app: :reviews,
  live_conn_pass_through: %{
    assigns: %{
      current_user: true
    },
    private: %{
      phoenix_endpoint: true
    }
  }

IO.inspect(conn)

%Plug.Conn{
  adapter: {Plug.Adapters.Cowboy.Conn, :...},
  assigns: %{
    current_user: %{
      __meta__: #Ecto.Schema.Metadata<:loaded, "users">,
      __struct__: Reviews.Accounts.User,
      avatar: %Reviews.Avatar{
        __meta__: #Ecto.Schema.Metadata<:loaded, "avatars">,
        id: 74,
        image: "1-avatar.jpg",
        inserted_at: ~N[2018-10-27 12:41:09.965086],
        updated_at: ~N[2018-10-27 12:41:09.965092],
        user_id: 1,
        users: #Ecto.Association.NotLoaded<association :users is not loaded>
      },
​

标签: elixirphoenix-framework

解决方案


Drab.Core.get_session/2文档中:

:access_session您必须在选项中use Drab.Commander或全局中 明确 [原文] 要访问哪些会话密钥 config.exs

config :drab, MyAppWeb.Endpoint,
  access_session: [:user_id]

因此,您需要:current_user在全局配置或use宏调用中允许您的密钥:

use Drab.Commander, access_session: [:current_user]

另请参阅Drab 的创建者在 ElixirForum 上对此的讨论。


推荐阅读