「入門Node.jsプログラミング」(書籍)のexpressフレームワークを用いたコーディングの中で、
passportモジュールを利用し、passwordをハッシュ化してユーザーデータを新規登録する記述についてです。
usersController.jsのcreateのregisterメソッドでのDBへの保存に失敗します。
【質問】
■エラーの原因について
どこを修正したらDBに保存できる可能性がありますでしょうか
■registerメソッドについて
registerメソッドがどのようなものかも教えていただけますと幸いです。
【検証したこと】
・userモデルにpassport-local-mongooseモジュールをプラグインし、リクエストされたpasswordがハッシュ化されるまで確認できました。
・registerメソッドの第二引数のuserがundefinedでした。
javascript
1//user.js 2const 3mongoose = require('mongoose'), 4passportLocalMongoose = require('passport-local-mongoose') 5; 6 7const {Schema} = mongoose, 8userSchema = new Schema({ 9 name:{ 10 first:{ 11 type:String, 12 trim:true 13 }, 14 last:{ 15 type:String, 16 trim:true 17 } 18 }, 19 email:{ 20 type:String, 21 required:true, 22 lowercase:true, 23 unique:true 24 }, 25 zipCode:{ 26 type:Number, 27 min:[10000,'not correct'], 28 max:99999 29 } 30}); 31 32userSchema.plugin(passportLocalMongoose,{ 33 usernameField: 'email' 34}); 35 36module.exports = mongoose.model('User', userSchema);
javascript
1//usersController.js 2const User = require('../models/user'); 3 4const getUserParams = body =>{ 5 return{ 6 name:{ 7 first: body.first, 8 last: body.last 9 }, 10 email: body.email, 11 zipCode: body.zipCode 12 }; 13}; 14 15module.exports = { 16//(略) 17 create:(req,res,next)=>{ 18 let newUser = new User(getUserParams(req.body)); 19 console.log(newUser); //req.body.passwordがsalt,hash化されている 20 21 User.register(newUser,req.body.password, (error,user) => { 22 console.log(user); //undefined 23 if(user){ 24 //ユーザー作成成功 25 req.flash( 26 'success', 27 `${fullName}:新規登録成功` 28 ); 29 res.locals.redirect = '/users'; 30 next(); 31 }else{ 32 //ユーザー作成失敗 33 req.flash( 34 'error', 35 '新規登録失敗' 36 ); 37 res.locals.redirect = '/users/new'; 38 next(); 39 } 40 }); 41 }, 42 43 redirectView:(req,res,next)=>{ 44 let redirectPath = res.locals.redirect; 45 if(redirectPath) res.redirect(redirectPath); 46 else next(); 47 } 48};
javascript
1//package.json 2{ 3 "name": "express_templates", 4 "version": "1.0.0", 5 "description": "", 6 "main": "main.js", 7 "scripts": { 8 "test": "echo \"Error: no test specified\" && exit 1", 9 "start": "node main.js" 10 }, 11 "author": "", 12 "license": "ISC", 13 "dependencies": { 14 "bcrypt": "^4.0.1", 15 "body-parser": "^1.19.0", 16 "connect-flash": "^0.1.1", 17 "cookie-parser": "^1.4.5", 18 "ejs": "^3.0.1", 19 "express": "^4.17.1", 20 "express-ejs-layouts": "^2.5.0", 21 "express-session": "^1.17.0", 22 "express-validator": "^6.4.0", 23 "http-status-codes": "^1.4.0", 24 "method-override": "^3.0.0", 25 "mongo": "^0.1.0", 26 "mongoose": "^5.9.3", 27 "passport": "^0.4.1", 28 "passport-local": "^1.0.0", 29 "passport-local-mongoose": "^6.0.1" 30 } 31}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。