Я пытаюсь использовать Openmaize для аутентификации пользователей и испытываю трудности с получением phoenix через токен, когда пользователь входит в систему. Похоже, что токен не назначается и не передается клиенту, и поэтому Phoenix.Token.verify терпит неудачу.Передача Phoenix.Token в браузер и из браузера
IO.inspect(socket)
в UserSocket.connect
возвращает это.
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>}
Я определил set_current_user(user, conn)
функцию в authenticate.ex контроллер, который выглядит как
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
,
и, наконец, 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' в своем шаблоне, который будет повышаться, если он не существует при назначении. – Gazler
Спасибо. Это дает мне ошибку. «присваивать @user_token недоступно в шаблоне eex» –
Вы определенно называете set_user_token? Не могли бы вы разместить остальные функции? – Gazler