elixir - 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>
},
解决方案
: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 上对此的讨论。
推荐阅读
- java - 找不到静态资源
- python - 更新用户后如何发送邮件?
- python-3.x - 内存随着 matplotlib 和 tkinter 的增加而增加
- javascript - 如何将 Skeleton.css 添加到我的 React 应用程序?
- javascript - 通过单击 HTML 中的链接覆盖 JS 变量
- c# - Visual Studio中的C#应用程序,一个类看不到另一个类中的文本框
- r - 将行添加到具有组内数据总和的数据框
- python - 将 paramiko 和 sshtunnel 与 docker alpine 一起使用的 libssl 问题
- javascript - 不使用 Redux 管理状态
- sql - 选择失败。3706: 语法错误: '(' 和 'current_date' 关键字之间的预期值