您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何實(shí)現(xiàn)僅用于開發(fā)的登錄”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何實(shí)現(xiàn)僅用于開發(fā)的登錄”吧!
首先在 main()
函數(shù)中添加此路由。
router.HandleFunc("POST", "/api/login", requireJSON(login))
此函數(shù)處理對(duì) /api/login
的 POST 請(qǐng)求,其中 JSON body 只包含用戶名,并以 JSON 格式返回通過認(rèn)證的用戶、令牌和過期日期。
func login(w http.ResponseWriter, r *http.Request) { if origin.Hostname() != "localhost" { http.NotFound(w, r) return } var input struct { Username string `json:"username"` } if err := json.NewDecoder(r.Body).Decode(&input); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } defer r.Body.Close() var user User if err := db.QueryRowContext(r.Context(), ` SELECT id, avatar_url FROM users WHERE username = $1 `, input.Username).Scan( &user.ID, &user.AvatarURL, ); err == sql.ErrNoRows { http.Error(w, "User not found", http.StatusNotFound) return } else if err != nil { respondError(w, fmt.Errorf("could not query user: %v", err)) return } user.Username = input.Username exp := time.Now().Add(jwtLifetime) token, err := issueToken(user.ID, exp) if err != nil { respondError(w, fmt.Errorf("could not create token: %v", err)) return } respond(w, map[string]interface{}{ "authUser": user, "token": token, "expiresAt": exp, }, http.StatusOK) }
首先,它檢查我們是否在本地主機(jī)上,或者響應(yīng)為 404 Not Found
。它解碼主體跳過驗(yàn)證,因?yàn)檫@只是為了開發(fā)。然后在數(shù)據(jù)庫(kù)中查詢給定用戶名的用戶,如果沒有,則返回 404 NOT Found
。然后,它使用用戶 ID 作為主題發(fā)布一個(gè)新的 JSON Web 令牌。
func issueToken(subject string, exp time.Time) (string, error) { token, err := jwtSigner.Encode(jwt.Claims{ Subject: subject, Expiration: json.Number(strconv.FormatInt(exp.Unix(), 10)), }) if err != nil { return "", err } return string(token), nil }
該函數(shù)執(zhí)行的操作與 前文 相同。我只是將其移過來以重用代碼。
創(chuàng)建令牌后,它將使用用戶、令牌和到期日期進(jìn)行響應(yīng)。
現(xiàn)在,你可以將要操作的用戶添加到數(shù)據(jù)庫(kù)中。
INSERT INTO users (id, username) VALUES (1, 'john'), (2, 'jane');
你可以將其保存到文件中,并通過管道將其傳送到 Cockroach CLI。
cat seed_users.sql | cockroach sql --insecure -d messenger
就是這樣。一旦將代碼部署到生產(chǎn)環(huán)境并使用自己的域后,該登錄功能將不可用。
到此,相信大家對(duì)“如何實(shí)現(xiàn)僅用于開發(fā)的登錄”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。