Passport-local-mongoose :注册后立即验证用户 [英] Passport-local-mongoose : Authenticate user right after registration

查看:82
本文介绍了Passport-local-mongoose :注册后立即验证用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 passport-local-mongoose 对用户进行身份验证在/register 表单上提交 POST 后.我不明白为什么我总是未经授权"&奇怪的是,数据库上没有提交任何数据(如果我从 app.post("/register") 中删除passport.authenticate('local'),它就可以工作)

I am trying to use passport-local-mongoose to authenticate a user after submitting a POST on the /register form. I can't figure out why i always get "unauthorized" & oddly no data is submitted on the database (it works if i remove "passport.authenticate('local') from app.post("/register") )

有什么想法吗?


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(); 
}

推荐答案

根据https://github.com/saintedlama/passport-local-mongoose你通过调用 register(user, password, cb) 来注册一个用户

According to the API documentation of passport-local-mongoose at https://github.com/saintedlama/passport-local-mongoose you register a user by calling register(user, password, cb)

所以你的 register.js 应该看起来像这样

So your register.js should look something like this

 ...

 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
        });
     });
 }

不要忘记在 register.js 中要求护照

and don't forget to require passport in register.js

这篇关于Passport-local-mongoose :注册后立即验证用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆