2015-12-08 114 views
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 
     }) 
    } 

    ... 
} 

現在我可以進入的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頁面,幷包含錯誤消息,但我不知道我應該在這裏處理該問題。

我一直在從一些不同的角度看這個,我(據我所知)還沒有「啊哈」!我感到自信的時刻正在以正確的方式接近這一點。我是否以非常規的方式去解決這個問題?

回答

0

我正在使用SRP principle指導我在這裏。

有2個紅旗。爲了實際創建用戶,您不需要密鑰。對於實際人創建用戶的安全性需要祕密。因此,關鍵邏輯應與控制器中其他以實際人員爲重點的邏輯相關,而不在Auth.create方法中。

第二個紅旗是你想保持重定向發生在控制器。看起來你看到那面紅旗,那麼好的工作。

有控制器執行的安全性和重定向,從而使你的代碼會或多或少這樣的:

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

// auth.js 
exports.create = function(req) { 
    create_user(req); 
}