向用户注册添加密码

Adding a secret code to user sign up

本文关键字:密码 添加 用户注册      更新时间:2023-09-26

请原谅由于不熟悉这个框架及其组件而造成的任何无知,我正在边做边学。

我已经用angular-fullstack建立了一个基本的应用程序,并正在探索一些我想知道如何做的任务。特别是,我想在用户注册过程中添加一个额外的表单元素,这样不仅任何人都可以注册,而且只有那些提供预先确定的口头共享安全代码的人才能注册。如果输入的代码无效,则不应创建新用户,并(可选)向用户返回一些消息。

在我的server/config/environment/index.js文件中,我在secrets密钥中添加了一个额外的项目,我将使用它来检查是否输入了有效的代码

...
// Secret for session, you will want to change this and make it an environment variable
secrets: {
  session: 'myapp-secret',
  secretCode: 'my-secret' // pre-determined secret code
},
...

在我的表单中,我添加了附加字段并分配了ng-model="secret"。表单指向控制器的register函数,因此我还将新输入的值添加到传递给Auth.createUser:的参数中

$scope.register = function(form){
    ...
    if (form.$valid) {
        Auth.createUser({
            name: $scope.user.name,
            email: $scope.user.email,
            password: $scope.user.password,
            secret: $scope.secret // My input field to pass to the user controller
        })
    }
    ...
}

现在我可以进入server/api/user/user.controller.jscreate函数,并包含我的用于检查密码的逻辑。

/**
 * Creates a new user
 */
exports.create = function(req, res, next) {
  ...
  if (req.body.secret !== config.secrets.secretCode) {
     // cancel creating a new user
  };
  ...
};

我现在的问题是如何在if语句中处理此问题?浏览一下框架,我似乎可以重定向或做一些事情回到/signup页面,并包含一条错误消息,但我不确定我应该在这里做什么来处理它。

我一直在从多个不同的角度看待这件事,我(据我所知)还没有"啊哈!"的时刻,我相信我正在以正确的方式处理这件事。我是不是以一种非传统的方式来做这件事?

我使用SRP原理来指导我。

有两个危险信号。为了真正创建用户,您不需要密钥。为了安全起见,实际人员创建用户需要该机密。因此,关键逻辑应该与控制器中的其他实际的以人为中心的逻辑在一起,而不是在Auth.create方法内部。

第二个危险信号是您希望在控制器中保持重定向。看起来你看到了红旗,干得好。

让控制器执行安全和重定向,这样你的代码或多或少会是这样的:

// controller.js
if (key_matches)
   createUser();
else
   redirectUser()
// auth.js
exports.create = function(req) {
    create_user(req);
}