Más contenido relacionado
第5回鹿児島node.jsの会資料_内村
- 8. var randobet = (省略) : ランダム文字列生成
var config = { cookie_secret: randobet(30) }; : セッションID生成
app.use(express.cookieParser()); : クッキーを使用するのに必須
app.use(express.session({
key: 'conn', : セッションキー
secret: config.cookie_secret, : シークレットID
cookie: { httpOnly: true }, : httpのみ許可
expires: false : ここでセッションの期限を設定可能
}));
app.jsの解説1
- 9. var sequelize = new Sequelize('testdb', 'root', '●●●●', { : ●にはDBパスワ
ードを入力
host: "localhost", : アドレスを入力
port: 3306 : 3306が標準ポート
});
var Member = sequelize.define('member', { : DB設定
id : Sequelize.INTEGER,
name : Sequelize.STRING,
pass : Sequelize.STRING,
mail : Sequelize.STRING
});
app.jsの解説2
- 11. app.post('/reg', function(req, res){
var user = {};
user.name = sanitize(req.body.name); : ユーザ名
user.pass = encrypt(sanitize(req.body.pass), 'hoge'); : パスワード(暗号化)
var SourceCode = Member.build({ : Memberテーブルにビルド
name : user.name,
pass : user.pass,
mail : sanitize(req.body.mail) : sanitizeで特殊文字をエスケープしている
});
SourceCode.save().success(function (){
console.log('DB save success');
res.render('comp.ejs', {msg: "登録が完了しました。"}); : 登録完了
})
.error(function(){
res.render('error.ejs', {msg: "データの保存に失敗しました(データ保存エラー:7004)
"});
});
});
1.登録機能
- 12. app.post('/login', function(req, res){
var user = {};
user.mail = sanitize(req.body.mail); : メール
user.pass = sanitize(encrypt(req.body.pass, 'hoge')); : パスワード(暗号化)
if(user){
Member.find({ where: {'mail' : user.mail, 'pass' : user.pass}} ).success(function (data){
if(data && data != ""){
req.session.user = user; : セッション開始
gen_session(user,res); : クッキーを送付
res.redirect('/');
} else {
res.render('error.ejs', {msg: "ログインに失敗しました(データ不在エラー
:2001)"});
};
})
// 中略
});
2.ログイン機能
- 13. app.get('/', function(req, res){
var cookies = {};
req.headers.cookie && req.headers.cookie.split(';').forEach(function( cookie ) {
var parts = cookie.split('=');
cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim(); : クッキーから認証情報取出し
});
if(req.session.user && cookies.user){ : セッションが有効でクッキーが存在すれば
var cook = decrypt(cookies.user, 'hoge'); : クッキーの暗号化を解除
var cook_arr = cook.split('t');
Member.find({ where: {'mail' : cook_arr[0], 'pass' : cook_arr[1]}} ).success(function
(data){ : クッキーに含まれている認証情報が一致すれば
if(data && data != ""){
res.render('member.ejs', {}); : メンバーページを描画
} else {
res.render('error.ejs', {msg: "ログインに失敗しました"});
// 中略
});
3.ログイン機能
- 14. function gen_session(user,res) {
var auth_token = encrypt(user.mail +'t' + user.pass +'t','hoge');
: ユーザのメールとパスワードを暗号化したものを
res.cookie('user',auth_token,{path:'/',maxAge: 1000*60*60*24*30});
: クッキーに乗せて送信
};
4.モジュールの解説