تنظیم مسیرها (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 خود را باز کنید و مکاننماهایی برای پنج تابع مدیر جدید به صورت زیر اضافه کنید:
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 ایجاد کنیم:
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 را بهروزرسانی کنیم تا آیتمهای ناوبری برای صفحات جدید را شامل شود:
{{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}}
اگر دوست دارید، میتوانید در این نقطه برنامه را اجرا کنید و باید آیتمهای جدید را در نوار ناوبری به این شکل ببینید:
اگر روی لینکهای جدید کلیک کنید، باید با پاسخ متنی ساده مربوطه پاسخ داده شود. به عنوان مثال، اگر روی لینک 'ثبت نام' کلیک کنید، باید پاسخی مشابه این ببینید:
واژهنامه اصطلاحات فنی
| اصطلاح فارسی | معادل انگلیسی | توضیح |
|---|---|---|
| تنظیم مسیرها | Routes Setup | پیکربندی مسیرهای برنامه |
| احراز هویت کاربر | User Authentication | فرآیند تأیید هویت کاربران |
| مسیرهای ثبتنام | Sign Up Routes | مسیرهای مربوط به ثبتنام |
| مسیرهای ورود | Login Routes | مسیرهای مربوط به ورود |
| مسیرهای خروج | Logout Routes | مسیرهای مربوط به خروج |
| مسیرهای جدید | New Routes | مسیرهای اضافه شده |
| مسیریاب | Router | مدیریت کننده مسیرها |
| متد HTTP | HTTP Method | نوع درخواست HTTP |
| هندلر | Handler | پردازش کننده درخواست |
| الگوی مسیر | Route Pattern | قالب آدرس مسیر |