2016-11-20 5 views
0

私は、ローカルパスポートを使用してアプリケーションにログインしてサインアップしようとしています。パスポート - ローカルのユーザーにサインアップできません

しかし、サインアップフォームから投稿リクエストを送信すると、ユーザーはサインアップフォームにリダイレクトされます。

これは、ルートの定義です:

app.post('/signup', passport.authenticate('local-signup', { 
     successRedirect : '/profile', // redirect to the secure profile section 
     failureRedirect : '/signup', // redirect back to the signup page if there is an error 
     failureFlash : true // allow flash messages 
    })); 

これは私のconfig/passport.js

var LocalStrategy = require('passport-local').Strategy; 
var User   = require('../models/user'); 
var mysql = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : process.env.MYSQL_HOST, 
    user  : process.env.MYSQL_USER, 
    password : process.env.MYSQL_PASSWORD, 
    database : process.env.MYSQL_DB 
}); 

module.exports = function(passport) { 
    passport.serializeUser(function(user, done) { 
     console.log("abc serializeUser"); 
     console.log(user); 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function(id, done) { 
     console.log("abc deserializeUser"); 
     User.findById(id).then(function(user){ 
      done(null, user); 
     }).catch(function(e){ 
      done(e, false); 
     }); 
    }); 

    passport.use('local-signup', new LocalStrategy(

     function(username, password, done) { 
      console.log("abc local signup"); 
      User.findOne({where: {username: username}}).then(function(err, user) { 
       if (err) { return done(err); } 
       if (!user) { 
        console.log('Incorrect username.'); 
        return done(null, false, { message: 'Incorrect username.' }); 
       } else if (password != user.password) { 
        console.log('Incorrect password'); 
        return done(null, false, { message: 'Incorrect password.' }); 
       } else { 
        console.log('ok'); 
        done(null, user); 
       } 
      }); 

     } 

    )); 

}; 

ですこれは

"use strict"; 

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define("User", { 
    email: DataTypes.STRING, 
    password: DataTypes.STRING, 
    token: DataTypes.STRING 
    } 

); 

    return User; 
}; 

答えて

1

モデル/ user.jsのあるSequelizeの.then()を受け取ります結果のみ、エラーは.catch()ブロックで処理する必要があります。クエリは次のようになります。

 User.findOne({where: {username: username}}).then(function(user) { 
      if (!user) { 
       console.log('Incorrect username.'); 
       return done(null, false, { message: 'Incorrect username.' }); 
      } else if (password != user.password) { 
       console.log('Incorrect password'); 
       return done(null, false, { message: 'Incorrect password.' }); 
      } else { 
       console.log('ok'); 
       done(null, user); 
      } 
     }).catch(function(err){ 
      done(err); 
     }); 
+0

ありがとうございます!しかし、私はまだ同じエラーをgetitngです。ユーザーはサインアップフォームにリダイレクトされています –

+0

このブロックはサインアップではなくログイン戦略で使用する必要があります。サインアップ戦略では、ユーザ名が一意であることを確認してから、ユーザを保存し、必要なパラメータを渡して 'done()'関数を呼び出す必要があります –

関連する問題