繁体   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