簡體   English   中英

將經過身份驗證的用戶信息傳遞給 sql 查詢的最佳方法是什么?

[英]What is the best way to pass in authenticated user information to a sql query?

我的 web 應用程序使用表userspostsvotes ,用戶可以在其中創建帖子, votes表包含某些用戶在某些帖子上的單票(想想 Hackernews 或 Reddit)。

當使用 SQL 從posts中查詢帖子時,我在 SQL 中創建一個名為votable的變量,表示 a) 如果帖子是由當前登錄的用戶(用 2 表示)發布的,已由登錄用戶投票(用 0 表示),或尚未投票(用 1 表示)。

變量創建看起來像這樣,並傳入登錄用戶的 id(如果未登錄,則值為 0):

IF(posts.user_id = ?, 2, NOT EXISTS (SELECT * FROM votes WHERE user_id = ? AND post_id = posts.id)) AS votable

在我的 sql package 中獲得帖子的 function 的簽名是:

func (m *PostModel) GetByID(loggedInUserID, postID int) (*models.Post, error) 

但是,在我的處理程序中使用上下文是否有意義,因為上下文包含有關登錄用戶的信息? 或者這樣就可以了,處理程序只是將loggedInUserID直接傳遞給function,而我的sql package與實現上下文的細節更加隔離?

在上下文中隱藏基本數據。 context.Context不是一個好主意。 它消除了明確性、可讀性,並且很難知道數據是否真的存在於上下文中。

但是,您可以將context.Context添加到 function 以便能夠設置超時或在由於某種原因不再需要結果時取消它(例如,http 請求已取消/超時)。

func (m *PostModel) GetByID(ctx context.Context, loggedInUserID, postID int) (*models.Post, error)

然后將上下文傳遞給查詢執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM