node/express認証の例、password暗号化 / CSRF対応 / Redis 認証情報 #node #express #javascript

■ 概要:

前のnode/express 関連で、
ユーザー認証等の例となります。


■ 環境

node
express
Redis

■ 参考のコード

■ npm 追加

・暗号化

npm install bcrypt -save

・CSRF対応

npm install csrf --save

npm install express-session --save


■ 実装など

・app.js
前のCSRF対応と同様、express-session 設定しておきます。

・Login処理、Login画面起動
routes/index.js

/******************************** 
* 
*********************************/
router.get('/login', function(req, res) {
   LibCsrf.set_token(req, res) 
   res.render('login', { user : "" });
});
/******************************** 
* 
*********************************/
router.post('/login', function(req, res){
   try{
       if(LibCsrf.valid_token(req, res)== false){
           console.log("error, csrf token");
           res.redirect('/login')
       }
       var data = req.body
//        console.log(data )  
       let hashed_password = bcrypt.hashSync("1111", 10);
       if (data.email === "hoge@example.com" && bcrypt.compareSync(data.password,  hashed_password )) 
       {
//            console.log(hashed_password);    
           var user = {
               mail: data.email, password: hashed_password
           }
           var json = JSON.stringify( user );
           res.cookie('user', json );
           res.redirect('/')
       }else{
           console.log("error, login");
           res.clearCookie('user');
           res.redirect('/login')
       }        
   } catch (e) {
       console.log(e);
   }
});

LibCsrf.valid_token: CSRF トークン検証
bcrypt.hashSync, hash暗号化作成
bcrypt.compareSync ,暗号化文字と 入力passwordの検証
認証成功した場合、cookieにUser情報を保存し。TOPページ等にリダイレクトします。

■ Redis , User情報で。認証する

・参考のGit

■ 実装など

・redis 認証ログイン
routes/login.js

router.post('/',async function(req, res){
   try{
       client.on("error", function(error){ console.error(error); }); 
       if(LibCsrf.valid_token(req, res)== false){
           console.log("error, csrf token");
           res.redirect('/login')
       }
       var data = req.body
       var valid_user = await LibAuth.validRedisUserAuth(res ,client, data.email, data.password )
console.log( valid_user )  
       if (valid_user){
//            console.log(hashed_password);    
           res.redirect('/')
       }else{
           console.log("error, login");
           res.clearCookie('user');
           res.redirect('/login')
       }        
   } catch (e) {
       console.log(e);
   }

});

・LibAuth.validRedisUserAuth で、reids Userの mail, password を検証する例です

■ 関連する, アクション

ログイン: /login
ログアウト: logout
ユーザー追加: /users/add

■ 関連のページ

・node/expressで、 CSRF対応の例
https://note.com/knaka0209/n/n78ac5dc9db16




この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
1
はじめまして knaka0209 です。knaka Tech-Blogを書いています。 フリーのエンジニアで。普段はIT系の作業 空き時間に、IoTやAIによるデータ分析予測とか勉強しています。 https://kuc-arc-f.com