Skip to content

Instantly share code, notes, and snippets.

@indera
Forked from BestSonny/SignupChannel.ex
Created December 13, 2017 14:44
Show Gist options
  • Save indera/9e68017126a5933f9d87f02c35aee635 to your computer and use it in GitHub Desktop.
Save indera/9e68017126a5933f9d87f02c35aee635 to your computer and use it in GitHub Desktop.
#I use wsta tool in the command to call websocket
wsta 'ws://localhost:3000/socket/websocket' '{"topic":"signup","event":"phx_join","payload":{"login": "ABC", "name": "ABC", "password": "123", "password_confirmation": "123", "email": "[email protected]"},"ref":"1"}'
defmodule App.SignupChannel do
use App.Web, :channel
alias App.User
import Ecto.Changeset
require Logger
def join("signup", _params, socket) do
send self(), {:sign_up, _params}
{:ok, socket}
end
def handle_info({:sign_up, _params}, socket), do: socket |> sign_up( _params)
defp sign_up(socket, _params) do
changeset = User.changeset(%User{}, _params) |> User.with_password_hash
changeset = put_change(changeset, :profile_picture, "default_profile.png")
case Repo.insert changeset do
{:ok, user} ->
push socket, "sign_up", %{status: "successfully sign up"}
{:error, changeset} ->
push socket, "sign_up", %{status: "failed to sign up"}
end
{:noreply, socket}
end
end
defmodule App.UserSocket do
use Phoenix.Socket
channel "signup", App.SignupChannel
transport :websocket, Phoenix.Transports.WebSocket
def connect(_params, socket) do
{:ok, socket}
end
def id(_socket), do: nil
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment