Autentikasi dan Otorisasi Channel
Amankan Phoenix Channels Anda dengan memverifikasi token pengguna saat jabat tangan penggabungan dan mengotorisasi akses ke topik tertentu.
Autentikasi dan Otorisasi Channel adalah pelajaran Elixir & Phoenix: Scalable Backend Development gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Elixir & Phoenix: Scalable Backend Development, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Elixir & Phoenix: Scalable Backend Development mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Why Channels Need Auth
Channels are long-lived WebSocket connections. Without verification, anyone could join a private topic and read or send messages.
Authentication answers who is connecting, while authorization answers what topics they may join.
The Socket Connect Callback
Authentication starts in connect/3 of your UserSocket. It runs once when the WebSocket opens, before any channel is joined.
def connect(%{"token" => token}, socket, _connect_info) do
case verify_token(token) do
{:ok, user_id} -> {:ok, assign(socket, :user_id, user_id)}
:error -> :error
end
endGenerating a Token
Phoenix ships Phoenix.Token for signing short-lived tokens. The server signs the user id and the client passes it back when connecting.
token = Phoenix.Token.sign(MyAppWeb.Endpoint, "user socket", user.id)Verifying a Token
On connect, verify the token with the same salt. The max_age option rejects expired tokens.
Phoenix.Token.verify(MyAppWeb.Endpoint, "user socket", token, max_age: 86400)Rejecting Unauthorized Connections
Returning :error (or {:error, reason}) from connect/3 closes the socket immediately. The client never reaches any channel.
def connect(_params, _socket, _info), do: :errorAssigning the Current User
After verifying, store the identity on the socket with assign/3. Every channel on this socket can then read socket.assigns.user_id.
{:ok, assign(socket, :user_id, user_id)}Authorizing Channel Joins
Authorization happens in join/3. Compare the requested topic against the authenticated user before allowing the join.
def join("room:" <> room_id, _params, socket) do
if authorized?(socket.assigns.user_id, room_id) do
{:ok, socket}
else
{:error, %{reason: "unauthorized"}}
end
endScoping Private Topics
A common pattern uses the user id inside the topic name, like user:42. Reject the join if the topic id does not match the connected user.
def join("user:" <> id, _params, socket) do
if id == to_string(socket.assigns.user_id) do
{:ok, socket}
else
{:error, %{reason: "forbidden"}}
end
endClient-Side Token Passing
The JavaScript client sends the token as a connection param. The server reads it in connect/3.
let socket = new Socket('/socket', { params: { token: window.userToken } })
socket.connect()Handling Token Expiry
Tokens are short-lived on purpose. When a token expires the socket disconnects; the client should fetch a fresh token and reconnect.
- Keep
max_ageshort for sensitive apps - Refresh tokens before they expire
- Handle the socket
onErrorevent to reconnect
Security Best Practices
Strengthen channel security:
- Never trust client-supplied user ids — derive identity from the token
- Authorize every topic in
join/3 - Validate incoming payloads in
handle_in/3 - Use HTTPS/WSS so tokens travel encrypted
Quick Check
Test your channel security knowledge.
Recap
You secured Phoenix Channels end to end:
- Authenticate the socket in
connect/3usingPhoenix.Token - Assign the verified user onto the socket
- Authorize each topic in
join/3 - Reject expired tokens and reconnect with fresh ones
Proper auth keeps private real-time data safe.
Belajar Elixir dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Autentikasi dan Otorisasi Channel” gratis?
Ya — teks lengkap “Autentikasi dan Otorisasi Channel” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Elixir & Phoenix: Scalable Backend Development, upgrade ke CoddyKit PRO. Kursus Elixir & Phoenix: Scalable Backend Development mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Autentikasi dan Otorisasi Channel”?
Amankan Phoenix Channels Anda dengan memverifikasi token pengguna saat jabat tangan penggabungan dan mengotorisasi akses ke topik tertentu. Kamu berlatih Elixir & Phoenix: Scalable Backend Development dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Elixir & Phoenix: Scalable Backend Development?
Tidak diperlukan pengalaman sebelumnya. Elixir & Phoenix: Scalable Backend Development di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Autentikasi dan Otorisasi Channel” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Elixir & Phoenix: Scalable Backend Development ini?
Ya. Setiap pelajaran Elixir & Phoenix: Scalable Backend Development menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengantar Phoenix Channels
- Penyiaran dan Pesan Pub/Sub
- Kehadiran dan Pembaruan Data Langsung
- Autentikasi dan Otorisasi Channel