Access Conn назначает значения в Drab - PullRequest
0 голосов
/ 28 октября 2018

Я просматриваю Drab Live документы, но все еще не могу получить доступ к коннектам в Drab Commander сокете.Я использую последнюю версию: {:drab, "~> 0.9.3"}.

Почему IO.puts(user) ниже возвращаемого значения nil?


Drab Commander:

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:

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>
      },
​

1 Ответ

0 голосов
/ 29 октября 2018

Из документации Drab.Core.get_session/2:

Вы должны указать [sic], какие сеансовые ключи вы хотите использовать в опции :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]

Также см. Обсуждение этого на ElixirForum создателем Drab.

...