【问题标题】:Passing Phoenix.Token to and from browser将 Phoenix.Token 传入和传出浏览器
【发布时间】:2017-04-24 13:29:02
【问题描述】:

我正在尝试使用 Openmaize 进行用户身份验证,并且在用户登录时无法让 phoenix 传递令牌。似乎没有分配令牌并将其传递给客户端,因此 Phoenix.Token.verify 失败。

UserSocket.connect 中的IO.inspect(socket) 返回这个。

Phoenix.Socket{assigns: %{}, channel: nil, channel_pid: nil,
     endpoint: SeatSaver.Endpoint, handler: SeatSaver.UserSocket, id: nil,
     joined: false, pubsub_server: SeatSaver.PubSub, ref: nil,
     serializer: Phoenix.Transports.WebSocketSerializer, topic: nil,
     transport: Phoenix.Transports.WebSocket, transport_name: :websocket,
     transport_pid: #PID<0.2098.0>}

我在 authenticate.ex 控制器中定义了 set_current_user(user, conn) 函数,看起来像

  defp set_current_user(user, conn) do 
    token = Phoenix.Token.sign(conn, "user socket", user.id)
    conn
    |> assign(:current_user, user)
    |> assign(:user_token, token)

在app.html.eex中,添加了以下内容。

<script> window.userToken = “<%= assigns[:user_token] %>” </script>
<script src = “<%= static_path(@conn, “/js/app.js”) %>”></script>

app.js

let socket = new Socket(”/socket”, {
   params: {token: window.userToken},
   …
})

最后,user_socket.ex 有

  def connect(%{"token" => token}, socket) do

      case Phoenix.Token.verify(socket, "user socket",
      token, max_age: @max_age) do
        {:ok, user_id} ->
          IO.inspect(user_id)
          {:ok, assign(socket, :user_id, user_id)}
        {:error, _reason} ->
          :error     # this errors out because token is nil

      end
    end

【问题讨论】:

  • window.userToken 设置是否正确?您可以在您的模板中使用@user_token,如果它在分配时不存在,则会引发。
  • 谢谢。它给了我一个错误。 "分配 @user_token 在 eex 模板中不可用"
  • 你确定要调用 set_user_token 吗?你能发布剩下的功能吗?
  • 正如您所怀疑的,它没有被调用。我将代码移至 router.ex,它现在可以工作了。我仍然不知道为什么是 Openmaize。验证插件没有调用该函数。谢谢。

标签: authentication elixir phoenix-framework


【解决方案1】:

首先你需要在 config/config.exs 中添加 secret_key_base。

secret_key_base: xxxxx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多