Changeset View
Changeset View
Standalone View
Standalone View
web/channels/user_socket.ex
defmodule KolabChat.UserSocket do | defmodule KolabChat.UserSocket do | ||||
use Phoenix.Socket | use Phoenix.Socket | ||||
alias KolabChat.Repo | alias KolabChat.Database | ||||
alias KolabChat.User | |||||
## Channels | ## Channels | ||||
channel "room:*", KolabChat.RoomChannel | channel "room:*", KolabChat.RoomChannel | ||||
channel "system", KolabChat.SystemChannel | channel "system", KolabChat.SystemChannel | ||||
## Transports | ## Transports | ||||
transport :websocket, Phoenix.Transports.WebSocket | transport :websocket, Phoenix.Transports.WebSocket | ||||
transport :longpoll, Phoenix.Transports.LongPoll | transport :longpoll, Phoenix.Transports.LongPoll | ||||
# Socket params are passed from the client and can | # Socket params are passed from the client and can | ||||
# be used to verify and authenticate a user. After | # be used to verify and authenticate a user. After | ||||
# verification, you can put default assigns into | # verification, you can put default assigns into | ||||
# the socket that will be set for all channels, ie | # the socket that will be set for all channels, ie | ||||
# {:ok, assign(socket, :user_id, verified_user_id)} | # {:ok, assign(socket, :user_id, verified_user_id)} | ||||
# To deny connection, return `:error`. | # To deny connection, return `:error`. | ||||
def connect(%{"token" => token}, socket) do | def connect(%{"token" => token}, socket) do | ||||
case Phoenix.Token.verify(socket, "user", token, max_age: 86400) do | case Phoenix.Token.verify(socket, "user", token, max_age: 86400) do | ||||
{:ok, user_id} -> | {:ok, user_id} -> | ||||
socket = assign(socket, :user, Repo.get!(User, user_id)) | socket = assign(socket, :user, Database.User.read!(user_id)) | ||||
{:ok, socket} | {:ok, socket} | ||||
{:error, _} -> | {:error, _} -> | ||||
:error | :error | ||||
end | end | ||||
end | end | ||||
# Socket id's are topics that allow you to identify all sockets for a given user: | # Socket id's are topics that allow you to identify all sockets for a given user: | ||||
# | # | ||||
Show All 10 Lines |