2016-04-07 13 views
1

Bir kullanıcı kimlik doğrulamasını/kayıt formunu gönderdikten sonra doğrulamak için passport-local-mongoose kullanmaya çalışıyorum. Neden her zaman "yetkisiz" aldığımı anlayamıyorum & veri tabanı üzerinde hiçbir veri gönderilmiyor ("passport.authenticate" ("local") app.post ("/ register") dan kaldırılırsa çalışır)
?Passport-local-mongoose: Kaydolduktan sonra kullanıcının kimliğini doğrula

herhangi bir fikir


app.js:

// ====== Dependencies 
var express = require('express'); 
    bodyParser = require('body-parser'); 
    validator = require('express-validator'); 
    cookieParser = require('cookie-parser'); 
    expressSession = require('express-session'); 
    passport = require('passport'); 
    LocalStrategy = require('passport-local').Strategy; 
    auth = require('./controllers/auth'); 
    registration = require('./controllers/register'); 
    User = require('./models/user'); 
// ====== Options 
var app = express() 
.use(bodyParser.urlencoded({ extended: false })) 
.use(bodyParser.json()) 
.use(validator()) 
.set('view engine','ejs') 
.use(express.static("views")) 
.use(cookieParser()) 
.use(expressSession({ 
    secret : 'soooosecret', 
    resave : true, 
    saveUninitialized : false 
})) 
.use(passport.initialize()) 
.use(passport.session()); 
passport.use(new LocalStrategy(User.authenticate())); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

    app.post('/register', passport.authenticate('local'), registration.reg); 

app.listen(8080); 
console.log('Server running at 8080'); 

Register.js:

var User = require('../models/user'); 

var reg = function (req, res) { 

    /* some form validation... */ 
    var errors = req.validationErrors(); 

    if (errors) { 
     res.render("register" , { errors : errors }); 
    } 
    else { 
     var newUser = new User({ 
      username : username, 
      password : password, 
      email : email, 
      tel : tel, 
      country : country 
     }); 

     User.createUser(newUser); 
    } 

} 
module.exports = { reg : reg } 

user.js:

var mongoose = require('mongoose'); 
    mongoose.connect('mongodb://localhost/mvpem'); 

var passportLocalMongoose = require('passport-local-mongoose'); 

var db = mongoose.connection; 

var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    username : String, 
    password  : String, 
    email  : String, 
    tel  : Number, 
    country : String 
}); 

UserSchema.plugin(passportLocalMongoose); 

module.exports = mongoose.model('User', UserSchema); 

module.exports.createUser = function(newUser) { 
    newUser.save(); 
} 

cevap

2

https://github.com/saintedlama/passport-local-mongoose de pasaport yerel-çitanýn API belgelerine göre sen Yani Register.js bu

gibi görünmelidir (kullanıcı, şifre, cb)

kayıt arayarak bir kullanıcı kayıt

... 

if (errors) { 
    res.render("register" , { errors : errors }); 
} 
else { 
    var newUser = new User({ 
     username : username, 
     email : email, 
     tel : tel, 
     country : country 
    }); 

    User.register(newUser, password, function(err, user) { 
     if (errors) { 
      // handle the error 
     } 
     passport.authenticate("local")(req, res, function() { 
      // redirect user or do whatever you want 
     }); 
    }); 
} 

ve unutma lik

pasaport-yerel-firavunfaresi ile
+0

Merhaba ben mailid, adres ve kullanıcının diğer birkaç detayını saklamak istiyorum Başka bir bölümde bahsettiğiniz yönteminizi bir nesnedeki bir nesnede kullanmak ve User.register'da kullanmak işe yarayacak mı? Ve yeni Kullanıcı – Kannan

+0

@kannan yaratmaktan başka bir yolu var. Sorunuzu anladığımdan emin değilim. Kod snippet'inde 4 adet veri saklanır: kullanıcı adı, e-posta, tel ve ülke. İstediğiniz herhangi bir bilgiyi saklayabilirsiniz, bunu "var User = require ('../ models/user'); register.js 'de bulunan kullanıcı modelinde tanımlamanız gerekir. Kullanıcıyı önceki 4 adet veri gibi oluşturuyor. Umarım bu yardımcı oldu. –

+0

Şu anda aynı şeyi yapıyorum ve kodum örneğinize oldukça benziyor. Ancak başarılı bir kayıttan sonra MongoDB'de sadece kullanıcı adı ve hash kaydedildi. Bu ek verileri kullanıcı modelinden DB'ye nasıl kaydedebilirim ve bu verilere nasıl erişebilirim? –

0

o pasaport yapılandırma düzgün kurulum değil gibi görünüyor.

Sen nasıl giriş yapmanızda. Belgelerine

almak için başarı ve başarısızlık işlemek için pasaportunu söylemeliyiz. (Ana dosyanıza alacağınız bir config.js dosyası oluşturun);

var passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy, 
    , User = require('../models/user'); 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
     return done(null, false, { message: 'Incorrect username.' }); 
     } 
     if (!user.validPassword(password)) { 
     return done(null, false, { message: 'Incorrect password.' }); 
     } 
     return done(null, user); 
    }); 
    } 
)); 
+2

, aslında sadece strateji kurmak Register.js içinde pasaportu gerektirecek e OP vardır. http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/#.Vx2GVTcrKUk – N1mr0d

İlgili konular