今回利用するライブラリは下記の3つとなります
npm install jsonwebtoken npm install bcrypt npm install config
パスワード暗号方法
const bcrypt = require('bcrypt'); const saltRounds = 10; // フォーム画面で入力されたパスワード const myPlaintextPassword = 's0/\/\P4$$w0rD'; let someOtherPlaintextPassword = "" bcrypt.hash(myPlaintextPassword, saltRounds).then((hashPasswor) =>{ // 暗号化されたパスワードがhashPassworに代入されるので、DBに登録するなどしてください。 someOtherPlaintextPassword = hashPasswor });
パスワードと暗号化したデータを比較する
暗号化されたデータと暗号化されていないデータが正しいか比較する処理です。myPlaintextPassword
が暗号化していない値になっており、someOtherPlaintextPassword
が暗号化されているデータを入れて比較します。比較した値はisCorrectPassword
に入り、true or falseで値が返ってきます。
bcrypt.compare(myPlaintextPassword, someOtherPlaintextPassword ).then((isCorrectPassword) => { console.log(isCorrectPassword); });
ログイン認証後にトークンを生成する方法
var config = require('config'); var jwt = require('jsonwebtoken'); ## tokenを生成する ## expiresInはトークンの有効期限を指定します。 var token = jwt.sign({email: "<フォームで入力したメールアドレス>",password: "<フォームで入力したパスワード>"}, config.secret_key, { expiresIn: '1h' });
secret keyは設定ファイルに記述した内容を利用しております。設定ファイルは「config/default.json」というファイルを作成して下記のように記述します。
{ "secret_key": "hogehoge" }
トークンの有効チェック
try { jwt.verify(token, config.secret_key); } catch(err) { return {error: 'エラー!!!'} }
まとめ
- 過去にブログでまとめたpassportと上記の情報とを組み合わせてログインフォームとユーザー登録を作成していきたいと思います。