簡體   English   中英

用戶注冊和認證(注冊和登錄)Node.js

[英]User registration and authentication (register and login) Nodejs

我有兩種類型的用戶,賣方和買方。 我應該創建兩個不同的API來注冊和認證每種類型的用戶,還是創建一個API來處理兩個用戶? 另外,在創建數據庫模型時,我應該創建兩個不同的集合還是應該創建單個集合並創建一個額外的字段(例如角色),並使用用戶各自的角色填充它? 賣方和買方都共享幾乎所有字段,除了賣方有一個額外的字段,其中包含他們要出售的商品。 哪種方法更好? 我正在使用ExpressMongoDB ,我也打算在前端使用Angular

任何幫助將不勝感激,謝謝。

上面沒有一個嚴格的答案。 您可以將它們分開-分開的API和集合-優點是將關注點分開,從長遠來看,這可能對將來的開發有所幫助,在將來的開發中,您可能希望為兩方中的任何一方添加特定的內容而不會干擾對方。 同時,如果將它們放在一起-則只需維護較少的代碼。 您/您的組織將需要更多選擇來承擔正在構建的應用程序的長期前景。 如果必須做出選擇,我會將它們分開。

當您模擬收藏設計時,這是一個很好的問題。 您必須開始考慮您的用戶,以及賣方和買方有何不同。 供應商和買方都是用戶,但是您可以收集用戶正在出售的物品的集合,並可以使用布爾值來區分誰是買方和誰是賣方。 最終,這些問題是您在編寫API之前要決定的。 如果要為每個用戶注冊設置兩個單獨的API,那很好,但這完全取決於您。

假設您決定將登錄API統一為1。您可以定義用戶模型,如下所示。 我喜歡使用Typescript對我使用的所有內容進行類型檢查。 我可能已經做完了,但是我喜歡。

export interface User {
    id?: string; // add it as option in the case of regisration
    name: string;
    email: string;
    password?: string;
    // you can add more fields that both Vendor and Buyer would have in common.
}

export interface Vendor extends User {
    // here we define specific fields that a vendor would have that a buyer wouldn't
    selling: Array<Object>;
    isVendor: boolean; 
    revenue: number;
    // more fields here if needed
}

export interface Buyer extends User {
    // define fields that a buyer would have that a vendor wouldn't
    cart: Array<Object>; // cart items of what they are purchasing
    cartTotal: number;
    billing: string;
    // more fields here
}

在上面的代碼中,“用戶”界面定義了一個基本用戶,“購買者”和“供應商”界面擴展了“用戶”界面,每個界面都添加了自己的字段,這些字段對於那些模型是唯一的。

對於您的注冊API,您只需在表單中有一個復選框,詢問用戶是否為供應商。 這將在Vendor接口中啟用布爾值,告訴您的API(您將在API代碼內部進行處理),所發送的信息是針對Vendor的。 然后,將基本信息保存在“用戶”集合中,將供應商信息保存在“供應商”集合中,並在兩者之間保持公用密鑰,以供用戶相互搜索時參考。

使用登錄API時,您不必在身份驗證級別上區分兩者,因為用戶的基本信息包含身份驗證所需的字段,在呈現每種用戶類型的視圖時,只需檢查isVendor的布爾值即可存在並且為真,然后將用戶路由到正確的端點。

僅僅因為有很多方法可以解決這個問題,所以很難回答這個問題。 由開發人員決定他們更喜歡以哪種方式來組織所有內容並進行布局。 是否想簡單地為每種用戶類型創建一個端點? 去吧。 是否要將所有用戶類型的所有身份驗證合並為一個? 那也很好。

暫無
暫無

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

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