首页 > web前端 > js教程 > 用均值堆栈的用户身份验证

用均值堆栈的用户身份验证

Jennifer Aniston
发布: 2025-02-15 11:35:12
原创
427 人浏览过

>本文探讨了均值堆栈应用程序中的用户身份验证,采用通用体系结构:与node.js,express.js和基于mongodb的and appi相互作用的角度单页应用程序。 我们将介绍安全用户管理的关键方面。

User Authentication with the MEAN Stack

核心身份验证挑战:

这个过程需要解决几个关键点:

  1. 用户注册。
  2. 安全的数据存储(密码从未直接存储)。>
  3. >用户登录。
  4. >在页面访问中维护主动用户会话。
  5. >仅限制对身份验证的用户对特定页面的访问。>
  6. >基于登录状态动态调整用户界面(例如,显示“登录”或“我的个人资料”按钮)。
高级身份验证概述:

>在进行代码之前,让我们检查高级身份验证流:>

数据存储:
    用户数据,包括哈希密码,位于mongodb中。 api(express.js):客户端互动(Angular):> jwts: jwts,更换传统cookie,是依靠静止API的单页应用程序的理想选择。 它们在成功的注册或登录时生成。>
  • >会话管理:> 使用Node.js's
  • 模块将密码
  • 安全:密码。 Passport.js,在Express中实现身份验证策略(特别是用于用户名/密码验证的本地策略)。
  • >示例应用程序结构: 完整的代码可在GitHub上找到。 先决条件包括Node.js,MongoDB和Angular Cli。 crypto
  • Angular应用程序:
>

Angular应用具有四个基本页面:User Authentication with the MEAN Stack

主页 寄存器

登录

profile(仅登录用户仅访问)

  1. > REST API(node.js,express.js,mongodb):
  2. API包含三个核心路线:
    1. /api/register(post):用户注册。
    2. >
    3. >/api/login(post):用户登录。
    4. >/api/profile/:USERID>(get):检索用户配置文件详细信息(受保护)。
    5. >

    > mongodb schema(mongoose):>

    中的简单用户架构定义/api/models/users.jsemailnamehash>字段。 salt字段是唯一的。email

    var userSchema = new mongoose.Schema({
      email: { type: String, unique: true, required: true },
      name: { type: String, required: true },
      hash: String,
      salt: String
    });
    登录后复制

    密码哈希和盐盐:

    setPassword>方法,利用node.js的validPassword模块,处理安全密码管理而无需直接存储密码。crypto>

    userSchema.methods.setPassword = function(password) {
      this.salt = crypto.randomBytes(16).toString('hex');
      this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha512').toString('hex');
    };
    
    userSchema.methods.validPassword = function(password) {
      var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha512').toString('hex');
      return this.hash === hash;
    };
    登录后复制

    jwt生成:

    方法使用

    >模块来创建JWT。 generateJwt记住,请记住将您的秘密安全地存储为环境变量,而不是直接在代码中。 jsonwebtoken PASSPORT.JS配置:

    Passport.js
    userSchema.methods.generateJwt = function() {
      var expiry = new Date();
      expiry.setDate(expiry.getDate() + 7);
    
      return jwt.sign({
        _id: this._id,
        email: this.email,
        name: this.name,
        exp: parseInt(expiry.getTime() / 1000),
      }, "MY_SECRET");
    };
    登录后复制
    passport.js简化了Express中的身份验证。

    文件定义了本地策略:

    api端点和身份验证:/api/config/passport.js

    >
    passport.use(new LocalStrategy({ usernameField: 'email' }, function(username, password, done) {
      User.findOne({ email: username }, function(err, user) {
        // ... (error handling and password verification logic) ...
      });
    }));
    登录后复制

    文件定义了API路由,包括使用的JWT身份验证的中间件:

    /api/routes/index.js角身份验证服务:express-jwt

    > Angular Service(
    var auth = jwt({ secret: 'MY_SECRET', userProperty: 'payload' });
    router.get('/profile', auth, ctrlProfile.profileRead);
    登录后复制
    )管理JWT存储(LocalStorage),检索,删除,API调用,登录状态检查和用户详细信息从JWT。

    角路线保护:

    > Angular Routar Guard(

    )保护authentication.service.ts路线,确保只登录的用户才能访问它。

    结论: 本综合指南详细说明了在平均堆栈应用程序中构建安全身份验证系统。 切记始终优先考虑安全密码处理和JWT管理。 提供的示例为在您自己的项目中实现强大的用户身份验证提供了坚实的基础。

    >

    常见问题(常见问题解答):auth-guard.service.ts(原始常见问题解答已经非常全面且写得很好。我不会在这里重复这些问题,因为加上它们会使他们的回答过长。)/profile

以上是用均值堆栈的用户身份验证的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板