2016-12-09 1 views
0

Я пытаюсь использовать 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 
+0

ли window.userToken быть установлен правильно? Вы можете использовать '@ user_token' в своем шаблоне, который будет повышаться, если он не существует при назначении. – Gazler

+0

Спасибо. Это дает мне ошибку. «присваивать @user_token недоступно в шаблоне eex» –

+0

Вы определенно называете set_user_token? Не могли бы вы разместить остальные функции? – Gazler

ответ

0

Сначала вам нужно добавить secret_key_base в конфигурации/config.exs.

secret_key_base: xxxxx