0

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

我已经建立了一个基本的应用程序,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
        })
    }

    ...
}

现在我可以进入检查密码的create功能并包含我的逻辑。server/api/user/user.controller.js

/**
 * Creates a new user
 */
exports.create = function(req, res, next) {
  ...

  if (req.body.secret !== config.secrets.secretCode) {
     // cancel creating a new user
  };

  ...
};

我现在的问题是我应该如何在我的if声明中处理这个问题?窥探框架,似乎我可以只做重定向或返回/signup页面并包含错误消息,但我不确定我应该在这里做什么来处理它。

我一直在从多个不同的角度看待这个问题,而我(据我所知)还没有“啊哈!” 我有信心以正确的方式接近这一点的那一刻。我会以一种非常规的方式来解决这个问题吗?

4

1 回答 1

0

我在这里使用SRP 原则来指导我。

有2个红旗。为了实际创建用户,您不需要密钥。出于安全目的,实际人员创建用户时需要该密钥。因此,关键逻辑应该与控制器中的其他以实际人员为中心的逻辑一起使用,而不是在Auth.create方法内部。

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

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

// controller.js
if (key_matches)
   createUser();
else
   redirectUser()

// auth.js
exports.create = function(req) {
    create_user(req);
}
于 2015-12-08T05:31:04.350 回答