2017-03-04 5 views
0

私は自分のサイトに新規ユーザーを登録するためにNode/Express/Passportを使用しています。十分に簡単です。私はMongooseを使ってデータを保存しています。Passport - ユーザーとパススルー情報を登録

目的:いくつかの質問に答える人(誰もログインしていない)をしようとしています。 (varsに保存されている回答)その後、私は彼らが新しいアカウントを登録したいと思います。

登録時ユーザー名とパスワードを回答に含まれるデータとともにデータベースに渡したいと思います。だから、目標はワンクリックでこれが起こることです。これはこれまで私が運がなかったのです。助けてくれてありがとう!

var Beliefs = mongoose.model("Beliefs", beliefsSchema); 
//handle sign up logic 
app.post("/quiz", function(req, res){ 
    var newUser = new User({username: req.body.username}); 
    User.register(newUser, req.body.password, function(err, user){ 
     if(err){ 
      req.flash("error", err.message); 
      console.log(err) 

     } 
     passport.authenticate("local")(req, res, function(){ 
      req.flash("success", "Welcome to JobQuiz " + user.username); 
      res.redirect("jobquiz"); 
     }); 
    }); 
}); 
    //Create Answers 
    Beliefs.create(req.body.beliefs, function(err, newBeliefs){ 
    Beliefs.create(req.body.beliefs2, function(err, newBeliefs2){ 
     if(err){ 
      console.log(err) 
     } else { 
      newBeliefs.author.id = req.user._id; 
      newBeliefs.author.username = req.user.username; 
      newBeliefs.save(); 
      newBeliefs2.author.id = req.user._id; 
      newBeliefs2.author.username = req.user.username; 
      newBeliefs2.save(); 
      console.log("User is:" + req.user.username) 
      console.log(req.body.beliefs) 
      res.redirect("/elementsintro"); 

     } 
    }); 


}); 

編集:

はここに私の質問です。このプロセス中にユーザーに情報を保存するにはどうすればいいですか?私の問題は、 私は以下のコードを追加します:

newBeliefs.author.id = req.user._id; newBeliefs.author.username = req.user.username;

...まだユーザーがいないというエラーが表示されます。どのようにこの問題を解決するだろうか?

答えて

0

ユーザーが存在しない場合やユーザー名とパスワードが既存のユーザーと一致する場合、ユーザーを登録する新しいLocalStrategyを作成できます。

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

passport.use('local-login-register', new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { 
     return done(err); 
     } 
     if (!user) { 
     var newUser = new User({username: username}); 
     User.register(newUser, password, function(err, user){ 
      if(err){ 
       return done(err); 
      } 
      return done(null, user); 
     }); 
     } else if (!user.validPassword(password)) { 
     return done(null, false, { message: 'Username already exists. Incorrect password.' }); 
     } else { 
     return done(null, user); 
     } 
    }); 
    } 
)); 

は次に、新しいエンドポイントを登録します。

app.post('/quiz', function(req, res, next) { 
    passport.authenticate('local-login-register', function(err, user, info) { 
     var quiz = req.body.quiz; 

     if (err) { return next(err); } 
     if (!user) { 
      // user needs to reanswer quiz or save user answers in session 
      // and redirect user to new page with registraion form 
     } 

     // save here your quiz answers 
    })(req, res, next); 
}); 
+0

をありがとうねえ!私はこれをうまく動作させることはできません。私の質問の編集をチェックしてください。コードから "newBeliefs.author.id = req.user._id"などを削除すると、すべて動作します。登録と同時にユーザーに情報を保存するにはどうすればいいですか? – AndrewLeonardi

+0

この信念のコードをPassportの成功関数に入れる必要があります。 – hya

+0

不明なユーザー名のプロパティを読み取ることができないと言う問題があります。 – AndrewLeonardi

関連する問題