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
これをほぼ参考パクにした