2017-09-21 4 views
1

ローカル認証にNode JSとPassport.jsを使用してWebアプリケーションに登録を実装しようとしましたが、Insomnia(Postmanのように) :ノードJS Passport - 400不正な登録要求

Bad Request 

私はこれを行うためにGoogleで見つけたチュートリアルに従っているため、わかりません。ここ は、ルート(auth.js)です:

const bcrypt = require('bcrypt-nodejs'); 
const db = require("./queries"); 
const passport = require('passport'); 
const LocalStrategy = require("passport-local").Strategy 

passport.use(new LocalStrategy(authenticate)) 
passport.use("local-register", new LocalStrategy({passReqToCallback: false}, register)) 

function authenticate(email, password, done) { 
    db.one('select * from users where email = $1', email) 
     .then((user) => { 
      if(!user || !bcrypt.compareSync(password, user.password)) { 
       return done(null, false, {message: "invalid user and password combination"}); 
      } 
      done(null, user) 
     }, done); 
} 

function register(email, password, done) { 
    db.one('select * from users where email = $1', email) 
     .then((user) => { 
      if(user) { 
       return done(null, false, {message: "An user with this address have already been created."}); 
      } 
      const newUser = { 
       email: email, 
       password: bcrypt.hashSync(password), 

      }; 
      db.none('insert into users(email, password) values($1, $2)', [newUser.email, newUser.password]) 
       .then((ids) => { 
        newUser.id = ids[0] 
        done(null, newUser) 
       }) 
     }) 
} 

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    db.one('select * from users where id = $1', id) 
     .then((user) => { 
      done(null, user) 
     }, done); 
}); 

私はPG-約束のパッケージで、このプロジェクトのためにDBとしてPostgreSQLの使用しています:ここで

const passport = require('passport'); 
const router = require('express').Router(); 
//const UserController = require('../controller/UserController'); 

router 
    // login 
    .post("/login", passport.authenticate("local", function(req, res, next) { 
     console.log(req); 
    })) 
    // logout 
    .get('/logout', (req, res, next) => { 
     req.session.destroy((err) => { 
      res.redirect('/login') 
     }) 
    }) 
    // signup 
    .post("/signup", passport.authenticate("local-register"), (req, res) => { 
     var userInfo = req.body; 
    }) 

module.exports = router; 

はPassport.jsファイルです。

そして、これはapp.jsファイルです:私はこのレスポンスを持っている理由

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var session = require('express-session'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var passport = require('passport') 
require('./passport'); 

var index = require('./routes/index'); 
var usersRoutes = require('./routes/users'); 
var authRoutes = require('./routes/auth'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(passport.initialize()) 
app.use(passport.session()) 

app.use('/', index); 
app.use(usersRoutes); 
app.use(authRoutes); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

Doestの誰もが知っていますか?私は不眠症の電子メールとパスワードを使用してポスト方法で試してみる

ありがとう!

+0

あなたはどのチュートリアルに従ったのですか?少なくとも 'pg-promise'が行く限り、あなたのコードはそこでは無効です:そこには2つの場所で' db.one'を呼び出していて、 'db.oneOrNone'のように処理します。そのためには[ライブラリのAPI](http://vitaly-t.github.io/pg-promise/Database.html)をチェックしてください。 –

答えて

2

デフォルトでは、LocalStrategyは、usernameとpasswordという名前のパラメータでクレデンシャルを検索します。 (passport-local on Github)。だから、あなたはあなたがすることができ、この行を編集する必要があるとライン4上のごpassport.jsファイルでemail

passport.use("local-register", new LocalStrategy({passReqToCallback: false, usernameField: 'email'}, register)) 
0

usernameFieldを設定し、あなたの行を終了確保;

const LocalStrategy = require('passport-local');

個別にあなたの詳細を認証する

passport.use(new LocalStrategy((email, password, done) => { 
User.getUserByEmail(email, (err, email) => { 
    if(err) throw err; 
    if(!email){ 
    return done(null, false, {message: 'Incorrect Username/Email'}); 
    } 

    User.comparePassword(password, user.password, (err, isMatch)=>{ 
    if(err) return done(err); 
    if(isMatch){ 
     return done(null, email); 
    } else { 
     return done(null, false, {message: 'Invalid Password'}); 
    } 
    }); 
}) 
})); 

コードを書く方法の1つに、ES6またはES5のいずれかを固執してください。また、ES6を使用する場合は、エラーのコードを完全にチェックするのに役立つように'use strict'を使用することをお勧めします。

関連する問題