<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Auth on BenzHub</title><link>https://benzhub.github.io/tags/auth/</link><description>Recent content in Auth on BenzHub</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Mon, 12 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://benzhub.github.io/tags/auth/index.xml" rel="self" type="application/rss+xml"/><item><title>Supabase MFA 與 SSR：多因子驗證與伺服器端渲染 | Supabase 完整教學</title><link>https://benzhub.github.io/post/supabase/023-auth-mfa-ssr/</link><pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/supabase/023-auth-mfa-ssr/</guid><description>&lt;blockquote&gt;
&lt;p&gt;前面幾篇我們把「怎麼進門」講完了——&lt;strong&gt;email 密碼&lt;/strong&gt;、&lt;strong&gt;OAuth&lt;/strong&gt;、&lt;strong&gt;Magic Link 與 OTP&lt;/strong&gt;，全都通往同一組 session。這一篇談「進門之後怎麼守得更穩」：先幫登入加上&lt;strong&gt;第二道防線&lt;/strong&gt;，也就是 &lt;strong&gt;MFA（多因子驗證）／TOTP&lt;/strong&gt;，用 &lt;code&gt;enroll&lt;/code&gt;／&lt;code&gt;challenge&lt;/code&gt;／&lt;code&gt;verify&lt;/code&gt; 三步把 session 從 &lt;strong&gt;AAL1&lt;/strong&gt; 升級成 &lt;strong&gt;AAL2&lt;/strong&gt;，再用 &lt;strong&gt;RLS&lt;/strong&gt; 依 &lt;code&gt;aal&lt;/code&gt; 限制高敏感操作；接著處理 &lt;strong&gt;SSR&lt;/strong&gt;——用 &lt;code&gt;@supabase/ssr&lt;/code&gt; 以 &lt;strong&gt;cookie&lt;/strong&gt; 保管 session，靠 &lt;strong&gt;middleware&lt;/strong&gt; 在每個請求刷新 token，伺服器端一律用 &lt;code&gt;getUser()&lt;/code&gt; 而非 &lt;code&gt;getSession()&lt;/code&gt; 做授權。這是整個 Auth 段的收尾。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Supabase Magic Link 與 OTP：無密碼登入實作 | Supabase 完整教學</title><link>https://benzhub.github.io/post/supabase/022-auth-magiclink-otp/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/supabase/022-auth-magiclink-otp/</guid><description>&lt;blockquote&gt;
&lt;p&gt;前兩篇我們讓使用者用 &lt;strong&gt;email&lt;/strong&gt; 加密碼、或用 &lt;strong&gt;Google／GitHub&lt;/strong&gt; 社群帳號登入。這一篇走向另一個極端——&lt;strong&gt;完全不要密碼&lt;/strong&gt;：使用者只留一個 email，我們寄一條神奇連結（&lt;strong&gt;Magic Link&lt;/strong&gt;）或一組 &lt;strong&gt;6 碼 OTP&lt;/strong&gt;，點一下或輸入六位數就登入。核心是一支 &lt;code&gt;signInWithOtp&lt;/code&gt;，寄連結還是寄驗證碼只差在 email 樣板用 &lt;code&gt;{{ .ConfirmationURL }}&lt;/code&gt; 還是 &lt;code&gt;{{ .Token }}&lt;/code&gt;；驗證碼那條再用 &lt;code&gt;verifyOtp&lt;/code&gt; 收尾。我們也會講 &lt;code&gt;shouldCreateUser&lt;/code&gt;、簡訊 OTP、以及限流與過期這些實務細節。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Supabase OAuth 社群登入：Google／GitHub 一鍵登入實作 | Supabase 完整教學</title><link>https://benzhub.github.io/post/supabase/021-auth-oauth/</link><pubDate>Sat, 10 Oct 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/supabase/021-auth-oauth/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《Email/Password 驗證》我們讓使用者用 email 加密碼登入。這一篇換一種對使用者更省事的進門方式：&lt;strong&gt;OAuth 社群登入&lt;/strong&gt;——按一顆「用 &lt;strong&gt;Google&lt;/strong&gt; 登入」或「用 &lt;strong&gt;GitHub&lt;/strong&gt; 登入」的按鈕就完成。我們會走完整條路：在 Dashboard 設定 &lt;strong&gt;provider&lt;/strong&gt; 的 client id/secret 與 callback URL、前端呼叫 &lt;code&gt;signInWithOAuth&lt;/code&gt; 觸發跳轉、理解 &lt;strong&gt;PKCE&lt;/strong&gt; 流程如何防截取、在 callback route 用 &lt;code&gt;exchangeCodeForSession&lt;/code&gt; 換回 &lt;strong&gt;session&lt;/strong&gt;，最後讀取 provider 帶回的個人資料。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Supabase Email/Password 驗證：註冊、確認信與密碼重設 | Supabase 完整教學</title><link>https://benzhub.github.io/post/supabase/020-auth-email-password/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/supabase/020-auth-email-password/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《Auth 入門》我們把 &lt;strong&gt;session&lt;/strong&gt;、&lt;strong&gt;JWT&lt;/strong&gt; 與 &lt;strong&gt;RLS&lt;/strong&gt; 的整合地基打好了。這一篇要把它落地：實作最經典、幾乎每個應用都會用到的 &lt;strong&gt;Email / Password&lt;/strong&gt; 驗證。我們會走完整條路——&lt;code&gt;signUp&lt;/code&gt; 註冊、&lt;strong&gt;Email 確認信&lt;/strong&gt;流程、&lt;code&gt;signInWithPassword&lt;/code&gt; 登入、&lt;code&gt;signOut&lt;/code&gt; 登出，一直到 &lt;code&gt;resetPasswordForEmail&lt;/code&gt; + &lt;code&gt;updateUser&lt;/code&gt; 的&lt;strong&gt;密碼重設&lt;/strong&gt;，並用 &lt;code&gt;onAuthStateChange&lt;/code&gt; 即時監聽狀態變化。你會得到一套真的能跑的驗證系統。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Supabase Auth 入門：使用者、Session 與 JWT | Supabase 完整教學</title><link>https://benzhub.github.io/post/supabase/019-auth-intro/</link><pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/supabase/019-auth-intro/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Supabase Auth&lt;/strong&gt; 建立在 &lt;strong&gt;GoTrue&lt;/strong&gt; 這套開源驗證伺服器之上，負責「你是誰」這件事——使用者的註冊、登入、以及登入狀態（&lt;strong&gt;session&lt;/strong&gt;）的管理。這一篇是核心服務的起點：我們會講清楚 &lt;strong&gt;access token&lt;/strong&gt;（&lt;strong&gt;JWT&lt;/strong&gt;）與 &lt;strong&gt;refresh token&lt;/strong&gt; 怎麼搭配、&lt;code&gt;auth.users&lt;/code&gt; 系統表與你自建的 &lt;code&gt;public.profiles&lt;/code&gt; 如何關聯，以及最關鍵的一環——&lt;strong&gt;JWT&lt;/strong&gt; 裡的 &lt;code&gt;sub&lt;/code&gt; 為什麼等於 &lt;code&gt;auth.uid()&lt;/code&gt;，讓 &lt;strong&gt;Auth&lt;/strong&gt; 與前面學過的 &lt;strong&gt;RLS&lt;/strong&gt; 無縫接上。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>