読者です 読者をやめる 読者になる 読者になる

Node+Redsi+Expressでとても実装に不安な会員登録&ログイン機能を実装した

すげー自信がない

パクるなよ!!!!ダメ!!!!ゼッタイ!!!!痛い目にあうぞ!!!!

こんなコード

バリデーション部分は抜いておきました。routeあたりのconfigは察してください。NodeでRedisでExpressでSessionをはってやるまで - AtAsAtAmAtArA 読んで。
新規登録

exports.create_signup= function(req, res){
  //もしそのnameがあるならuidをとってくる
  redis.get("name:" + req.body.name + ":uid", function(err, uid){ 
    if (uid){
      console.log("既に同じ名前があります");
      res.redirect('/signup');
    }
    else {   
      //新規登録
      //もしRedis.INCRして登録する
      redis.incr("uid", function(err, uid){
        redis.set("name:" + req.body.name +":uid", uid);
        redis.set("uid:" + uid + ":name", req.body.name); 
        redis.set("uid:" + uid + ":password", req.body.password); 
      });
    req.session.name = req.body.name; 
    req.session.password = req.body.password;
        res.redirect('/');
    } 
  }); 
}; 

ログインはこんな感じ

exports.create_login= function(req, res){
  //nameでuidをとってきて、合致するなら次へ
  redis.get("name:" + req.body.name + ":uid", function(err, uid){
    if (! uid){
      console.log('そんな名前ないです');
      res.redirect('/login'); 
    } 
    //とってきたUIDでpasswordを認証
    else redis.get("uid:" + uid + ":password", function(err2, real_password){ 
      if (req.body.password != real_password){
        console.log('パスワードが違うっぽい');
        res.redirect('/login'); 
     } 
      else{ 
        console.log('ログインします'); 
        req.session.name = req.body.name;
        res.redirect('/'); 
      }
    }); 
  });
};

すげー自信がないコードです。動いたには動いたけど……

参考

バナナでポン:node.js + redis : 値の取得
コールバックしないと中身が取り出せないって、のはかなりの罠
ケーススタディ — redis 2.0.3 documentation
Good Practiceのサンプル
https://bitbucket.org/shibu/redis_docjp/src/84cda6394280/tutorial/retwis-js/redis.js:tile
これをほぼ参考パクにした