2016-06-17 14 views
0

web-appでpassport、passport-local、pasport-local-mongooseを使用して認証を実装しようとしています(cloud9を使用)。passport-localとpassport-local-mongooseの認証エラー

私は(http://www.google.com作品にリダイレクト!)私のアプリ内の他のページにリダイレクトしようとしているときに私は(この上方向を必要とする)このスタックトレースを取得しています、私の認証が成功した、しかし:

TypeError: user.get is not a function 
    at /home/ubuntu/workspace/attendance/v4/node_modules/passport-local-mongoose/index.js:217:21 
    at pass (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/authenticator.js:347:9) 
    at Authenticator.deserializeUser (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/authenticator.js:352:5) 
    at SessionStrategy.authenticate (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/strategies/session.js:53:28) 
    at attempt (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/middleware/authenticate.js:348:16) 
    at authenticate (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/middleware/authenticate.js:349:7) 
    at Layer.handle [as handle_request] (/home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/layer.js:95:5) 
    at trim_prefix (/home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/index.js:312:13) 
    at /home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/index.js:330:12) 
    at next (/home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/index.js:271:10) 
    at initialize (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/middleware/initialize.js:53:5) 
    at Layer.handle [as handle_request] (/home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/layer.js:95:5) 
    at trim_prefix (/home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/index.js:312:13) 
    at /home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/home/ubuntu/workspace/attendance/v4/node_modules/express/lib/router/index.js:330:12) 

私app.jsは次のとおりです。

var express = require('express'), 
    app = express(), 
    BodyParser = require("body-parser"), 
    mongoose = require("mongoose"), 
    students_class = require("./models/class"), 
    passport= require("passport"), 
    localstrategy=require ("passport-local"), 
// passportlocalmongoose=("passport-local-mongoose"), 
    student = require ("./models/student"); 
    mongoose.connect("mongodb://localhost/attendance"); 



app.set("view engine", "ejs"); 
app.use(express.static ("public")); 
app.use(BodyParser.urlencoded({extended: true})); 
app.use (require("express-session")({ 
    secret: "liran", 
    resave:false, 
    saveUninitialized:false 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
passport.use(new localstrategy(student.authenticate()));  
passport.serializeUser(student.serializeUser()); 
passport.deserializeUser(student.serializeUser()); 

// ==== 
// routes 
// ===== 
app.get("/", function(req, res) { 
    student.find({}, function(err, student) { 
     if (err) { 
      console.log(err); 
     } else { 
      res.render("home/index.ejs", { 
       students: student 
      }); 
     } 

    }); 
}); 

app.post ("/login",passport.authenticate("local"),function (req,res) { 
    res.redirect("/"); 

}) 

と私のユーザモデル:

var mongoose = require("mongoose"), 
    passportlocalmongoose=require("passport-local-mongoose") 
var studentsSchema = new mongoose.Schema({ 
    username: String, 
    passport:String 
    // name: String, 
// image: String, 
// description:String, 
    // classes: [{ type: mongoose.Schema.Types.ObjectId, ref: 'class' }] 
}); 


studentsSchema.plugin(passportlocalmongoose); 
module.exports= mongoose.model("student", studentsSchema); 

答えて

1

さんは、私たちはヒントを見つけることができるかどうかを確認するためにスタックトレースを確認してみましょう:

TypeError: user.get is not a function 
    at /home/ubuntu/workspace/attendance/v4/node_modules/passport-local-mongoose/index.js:217:21 
    at pass (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/authenticator.js:347:9) 
    at Authenticator.deserializeUser (/home/ubuntu/workspace/attendance/v4/node_modules/passport/lib/authenticator.js:352:5) 
    ... 

うーん、deserializeUserが問題を引き起こしている可能性があります。

はのは、それがセットアップされた方法を見てみましょう:

passport.serializeUser(student.serializeUser()); 
passport.deserializeUser(student.serializeUser()); 

はおそらく、あなたがpassport.deserializerUser()student.deserializeUser()を渡すためのもの?

+0

とても簡単です:)ありがとう!! – LiranC