成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

構建一個即時消息應用(六):僅用于開發的登錄

開發 后端
我們已經實現了通過 GitHub 登錄,但是如果想把玩一下這個 app,我們需要幾個用戶來測試它。在這篇文章中,我們將添加一個為任何用戶提供登錄的端點,只需提供用戶名即可。該端點僅用于開發。

[[345429]]

本文是該系列的第六篇。

我們已經實現了通過 GitHub 登錄,但是如果想把玩一下這個 app,我們需要幾個用戶來測試它。在這篇文章中,我們將添加一個為任何用戶提供登錄的端點,只需提供用戶名即可。該端點僅用于開發。

首先在 main() 函數中添加此路由。

  1. router.HandleFunc("POST""/api/login", requireJSON(login)) 

登錄

此函數處理對 /api/login 的 POST 請求,其中 JSON body 只包含用戶名,并以 JSON 格式返回通過認證的用戶、令牌和過期日期。

  1. func login(w http.ResponseWriter, r *http.Request) { 
  2.     if origin.Hostname() != "localhost" { 
  3.         http.NotFound(w, r) 
  4.         return 
  5.     } 
  6.  
  7.     var input struct { 
  8.         Username string `json:"username"
  9.     } 
  10.     if err := json.NewDecoder(r.Body).Decode(&input); err != nil { 
  11.         http.Error(w, err.Error(), http.StatusBadRequest) 
  12.         return 
  13.     } 
  14.     defer r.Body.Close() 
  15.  
  16.     var user User 
  17.     if err := db.QueryRowContext(r.Context(), ` 
  18.         SELECT id, avatar_url 
  19.         FROM users 
  20.         WHERE username = $1 
  21.     `, input.Username).Scan( 
  22.         &user.ID, 
  23.         &user.AvatarURL, 
  24.     ); err == sql.ErrNoRows { 
  25.         http.Error(w, "User not found", http.StatusNotFound) 
  26.         return 
  27.     } else if err != nil { 
  28.         respondError(w, fmt.Errorf("could not query user: %v", err)) 
  29.         return 
  30.     } 
  31.  
  32.     user.Username = input.Username 
  33.  
  34.     exp := time.Now().Add(jwtLifetime) 
  35.     token, err := issueToken(user.ID, exp) 
  36.     if err != nil { 
  37.         respondError(w, fmt.Errorf("could not create token: %v", err)) 
  38.         return 
  39.     } 
  40.  
  41.     respond(w, map[string]interface{}{ 
  42.         "authUser":  user
  43.         "token":     token, 
  44.         "expiresAt": exp, 
  45.     }, http.StatusOK) 

首先,它檢查我們是否在本地主機上,或者響應為 404 Not Found。它解碼主體跳過驗證,因為這只是為了開發。然后在數據庫中查詢給定用戶名的用戶,如果沒有,則返回 404 NOT Found。然后,它使用用戶 ID 作為主題發布一個新的 JSON Web 令牌。

  1. func issueToken(subject string, exp time.Time) (string, error) { 
  2.     token, err := jwtSigner.Encode(jwt.Claims{ 
  3.         Subject:    subject, 
  4.         Expiration: json.Number(strconv.FormatInt(exp.Unix(), 10)), 
  5.     }) 
  6.     if err != nil { 
  7.         return "", err 
  8.     } 
  9.     return string(token), nil 

該函數執行的操作與 前文 相同。我只是將其移過來以重用代碼。

創建令牌后,它將使用用戶、令牌和到期日期進行響應。

種子用戶

現在,你可以將要操作的用戶添加到數據庫中。

  1. INSERT INTO users (id, username) VALUES 
  2.     (1, 'john'), 
  3.     (2, 'jane'); 

你可以將其保存到文件中,并通過管道將其傳送到 Cockroach CLI。

  1. cat seed_users.sql | cockroach sql --insecure -d messenger 

就是這樣。一旦將代碼部署到生產環境并使用自己的域后,該登錄功能將不可用。

本文也結束了所有的后端開發部分。

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2020-10-09 12:45:19

創建消息即時消息編程語言

2019-09-29 15:25:13

CockroachDBGoJavaScript

2020-10-09 15:00:56

實時消息編程語言

2019-10-28 20:12:40

OAuthGuard中間件編程語言

2020-03-31 12:21:20

JSON即時消息編程語言

2020-10-12 09:20:13

即時消息Access頁面編程語言

2020-10-19 16:20:38

即時消息Conversatio編程語言

2020-10-16 14:40:20

即時消息Home頁面編程語言

2021-03-25 08:29:33

SpringBootWebSocket即時消息

2023-08-14 08:01:12

websocket8g用戶

2025-06-30 01:45:00

Netty輪詢HTTP 協議

2015-03-18 15:37:19

社交APP場景

2014-10-15 11:01:02

Web應用測試應用

2021-12-03 00:02:01

通訊工具即時

2023-02-16 14:38:24

Rnote開源繪圖

2009-06-29 09:06:42

微軟Web版MSN

2022-02-10 07:03:32

流量應用架構數據交換

2018-08-22 17:32:45

2023-09-15 10:10:05

R 語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人99久久亚洲综合精品 | 91在线精品视频 | 国产成人精品综合 | 日本免费在线 | 99精品国产一区二区青青牛奶 | 久热久 | 午夜视频在线观看网址 | 精品九九久久 | 久久国产精品久久久久久 | 精品久久久久久红码专区 | xx性欧美肥妇精品久久久久久 | 久久久免费少妇高潮毛片 | 欧美一级全黄 | 91精品国产一区 | 精品国产久| 欧美激情精品久久久久 | 欧美午夜精品 | 亚洲高清在线观看 | 日韩国产中文字幕 | 91av在线视频观看 | 日韩在线观看 | 日本一区二区不卡视频 | 亚洲国产情侣自拍 | 亚洲3p| 亚洲精品1| 一区二区视频 | 在线一级片 | 新91视频网 | 亚洲二区视频 | 成人在线免费观看 | 精品亚洲国产成av人片传媒 | 国产三级国产精品 | 日本在线你懂的 | 中文成人在线 | 欧美国产精品一区二区三区 | 在线观看亚洲专区 | 极品电影院 | 91久久北条麻妃一区二区三区 | 一区二区三区免费观看 | 成人网在线看 | 夜夜夜操 |