Let's Go احراز هویت کاربر › تنظیم مسیرها
قبلی · فهرست · بعدی
فصل 10.1.

تنظیم مسیرها (Routes Setup)

در این بخش، نحوه تنظیم مسیرها (Routes Setup) برای احراز هویت کاربر (User Authentication) را بررسی می‌کنیم. این شامل مسیرهای ثبت‌نام (Sign Up Routes)، مسیرهای ورود (Login Routes) و مسیرهای خروج (Logout Routes) می‌شود.

برای شروع، بیایید مسیرهای جدید (New Routes) را به مسیریاب (Router) خود اضافه کنیم:

الگوی مسیر مدیر عمل
GET /{$} home نمایش صفحه اصلی
GET /snippet/view/{id} snippetView نمایش یک قطعه خاص
GET /snippet/create snippetCreate نمایش فرم برای ایجاد یک قطعه جدید
POST /snippet/create snippetCreatePost ایجاد یک قطعه جدید
GET /user/signup userSignup نمایش فرم برای ثبت نام کاربر جدید
POST /user/signup userSignupPost ایجاد کاربر جدید
GET /user/login userLogin نمایش فرم برای ورود کاربر
POST /user/login userLoginPost احراز هویت و ورود کاربر
POST /user/logout userLogoutPost خروج کاربر
GET /static/ http.FileServer ارائه یک فایل استاتیک خاص

توجه داشته باشید که مدیران جدید تغییر حالت — userSignupPost, userLoginPost و userLogoutPost — همگی از درخواست‌های POST استفاده می‌کنند، نه GET.

اگر در حال دنبال کردن هستید، فایل handlers.go خود را باز کنید و مکان‌نماهایی برای پنج تابع مدیر جدید به صورت زیر اضافه کنید:

File: cmd/web/handlers.go
package main

...

func (app *application) userSignup(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "نمایش فرم برای ثبت نام کاربر جدید...")
}

func (app *application) userSignupPost(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "ایجاد کاربر جدید...")
}

func (app *application) userLogin(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "نمایش فرم برای ورود کاربر...")
}

func (app *application) userLoginPost(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "احراز هویت و ورود کاربر...")
}

func (app *application) userLogoutPost(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "خروج کاربر...")
}

سپس وقتی که این کار انجام شد، بیایید مسیرهای مربوطه را در فایل routes.go ایجاد کنیم:

File: cmd/web/routes.go
package main

...

func (app *application) routes() http.Handler {
    mux := http.NewServeMux()

    fileServer := http.FileServer(http.Dir("./ui/static/"))
    mux.Handle("GET /static/", http.StripPrefix("/static", fileServer))

    dynamic := alice.New(app.sessionManager.LoadAndSave)

    mux.Handle("GET /{$}", dynamic.ThenFunc(app.home))
    mux.Handle("GET /snippet/view/{id}", dynamic.ThenFunc(app.snippetView))
    mux.Handle("GET /snippet/create", dynamic.ThenFunc(app.snippetCreate))
    mux.Handle("POST /snippet/create", dynamic.ThenFunc(app.snippetCreatePost))

    // Add the five new routes, all of which use our 'dynamic' middleware chain.
    mux.Handle("GET /user/signup", dynamic.ThenFunc(app.userSignup))
    mux.Handle("POST /user/signup", dynamic.ThenFunc(app.userSignupPost))
    mux.Handle("GET /user/login", dynamic.ThenFunc(app.userLogin))
    mux.Handle("POST /user/login", dynamic.ThenFunc(app.userLoginPost))
    mux.Handle("POST /user/logout", dynamic.ThenFunc(app.userLogoutPost))

    standard := alice.New(app.recoverPanic, app.logRequest, commonHeaders)
    return standard.Then(mux)
}

در نهایت، ما همچنین باید بخش nav.tmpl را به‌روزرسانی کنیم تا آیتم‌های ناوبری برای صفحات جدید را شامل شود:

File: ui/html/partials/nav.tmpl
{{define "nav"}}
<nav>
    <div>
        <a href='/'>خانه</a>
        <a href='/snippet/create'>ایجاد قطعه</a>
    </div>
    <div>
        <a href='/user/signup'>ثبت نام</a>
        <a href='/user/login'>ورود</a>
        <form action='/user/logout' method='POST'>
            <button>خروج</button>
        </form>
    </div>
</nav>
{{end}}

اگر دوست دارید، می‌توانید در این نقطه برنامه را اجرا کنید و باید آیتم‌های جدید را در نوار ناوبری به این شکل ببینید:

10.01-01.png

اگر روی لینک‌های جدید کلیک کنید، باید با پاسخ متنی ساده مربوطه پاسخ داده شود. به عنوان مثال، اگر روی لینک 'ثبت نام' کلیک کنید، باید پاسخی مشابه این ببینید:

10.01-02.png

واژه‌نامه اصطلاحات فنی

اصطلاح فارسی معادل انگلیسی توضیح
تنظیم مسیرها Routes Setup پیکربندی مسیرهای برنامه
احراز هویت کاربر User Authentication فرآیند تأیید هویت کاربران
مسیرهای ثبت‌نام Sign Up Routes مسیرهای مربوط به ثبت‌نام
مسیرهای ورود Login Routes مسیرهای مربوط به ورود
مسیرهای خروج Logout Routes مسیرهای مربوط به خروج
مسیرهای جدید New Routes مسیرهای اضافه شده
مسیریاب Router مدیریت کننده مسیرها
متد HTTP HTTP Method نوع درخواست HTTP
هندلر Handler پردازش کننده درخواست
الگوی مسیر Route Pattern قالب آدرس مسیر