江湖險惡,我從來都不輕易留下我的姓名。

憑你的智慧,我唬得了你嗎?

Sails練習之九-加密

| Comments

OK, 上課的影片是: Building a Sails Application: Ep11 - Encrypting passwords with bcrypt.

Bcrypt看一下相關的資訊

安裝的步驟如下

到專案目錄, 執行npm install bcrypt --save

加上--save的意思是除了install bcrypt到專案底下之外, 也把相依性設定寫入package.json, 這樣以後如果有人想要直接使用這個專案, 在目錄底下輸入npm install, 就可以將此專案需要用到的packages一次設定完成!

另外安裝bcrypt需要Visual Studio 2013的支援, 若你的Visual Studio版本大於2013, 請在安裝的時候再加入--msvs_version=2013

也就是npm install bcrypt --save --msvs_version=2013

OK, 安裝順利的話, 會出現如下的訊息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
E:\sails_app\activeityOverload>npm install bcrypt --save
-
> bcrypt@0.8.5 install E:\sails_app\activeityOverload\node_modules\bcrypt
> node-gyp rebuild


E:\sails_app\activeityOverload\node_modules\bcrypt>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node  rebuild )

在這個方案中一次建置一個專案。若要啟用平行組建,請加入 "/m" 參數。 (Visual Studio 2013 C++ Support)
  blowfish.cc
  bcrypt.cc
..\src\bcrypt.cc(232): warning C4267: '=' : conversion from 'size_t' to 'unsigned char', possible loss of data
[E:\sails_app\activeityOverload\node_modules\bcrypt\build\bcrypt_lib.vcxproj]  bcrypt_node.cc ..\src\bcrypt_node.cc(76): warning C4244: 'argument' : conversion from 'ssize_t' to 'unsigned char', possible loss  of data

[E:\sails_app\activeityOverload\node_modules\bcrypt\build\bcrypt_lib.vcxproj]
..\src\bcrypt_node.cc(135): warning C4244: 'argument' : conversion from 'const ssize_t' to 'unsigned char', possible loss of data

[E:\sails_app\activeityOverload\node_modules\bcrypt\build\bcrypt_lib.vcxproj]
..\src\bcrypt_node.cc(229): warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data

[E:\sails_app\activeityOverload\node_modules\bcrypt\build\bcrypt_lib.vcxproj]
..\src\bcrypt_node.cc(230): warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data

[E:\sails_app\activeityOverload\node_modules\bcrypt\build\bcrypt_lib.vcxproj]
win_delay_load_hook.c

Creating library E:\sails_app\activeityOverload\node_modules\bcrypt\build\Release\bcrypt_lib.lib and
object E:\sails_app\activeityOverload\node_modules\bcrypt\build\Release\bcrypt_lib.exp
  Generating code
  Finished generating code
  bcrypt_lib.vcxproj -> E:\sails_app\activeityOverload\node_modules\bcrypt\build\Release\\bcrypt_lib.node

bcrypt@0.8.5 node_modules\bcrypt
├── bindings@1.2.1
└── nan@2.0.5

裝完之後, 接著我們修改activeityOverload\api\models\底下的User.js

User.js 新增beforeCreate Function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module.exports = {

  schema: true,

  attributes: {...},

  beforeCreate: function (values, next) {

    // This checks to make sure the password and password confirmation match before creating record
    if (!values.password || values.password != values.confirmation) {
      return next({err: ["Password doesn't match password confirmation."]});
    }

    require('bcrypt').hash(values.password, 10, function passwordEncrypted(err, encryptedPassword) {
      if (err) return next(err);
      values.encryptedPassword = encryptedPassword;
      // values.online= true;
      next();
    });
  }
};

新增完成之後, 重啟sails, (啟動sails之前記得要先啟動mongo db)

接著新增一名使用者看看, 新增完成之後, 使用mongo-express登入進去mongo db的後台去看, 我們的新的使用者是不是有已經加密過的密碼了!

好的, 大致上是這樣嚕

Comments