MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडब के साथ एक्सप्रेस और पासपोर्ट का उपयोग करके नोडज में सरल लॉगिन पृष्ठ

यहां उपयोगकर्ताओं को लॉग इन/लॉगआउट करने के लिए पासपोर्ट का उपयोग करते हुए एक सरल सेटअप दिया गया है:

मुख्य app.js फ़ाइल पर

/* Auth config  --------------------------------*/
// @see http://frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/

var passport = require('passport');
var User = require('./app/models/User'),

passport.use(User.localStrategy);
passport.serializeUser(User.serializeUser);
passport.deserializeUser(User.deserializeUser);

// Default session handling. Won't explain it as there are a lot of resources out there
app.use(express.session({
    secret: "mylittlesecret",
    cookie: {maxAge: new Date(Date.now() + 3600000)}, // 1 hour
    maxAge: new Date(Date.now() + 3600000), // 1 hour
    store: new RedisStore(config.database.redis), // You can not use Redis 
}));

// The important part. Must go AFTER the express session is initialized
app.use(passport.initialize());
app.use(passport.session());

// Set up your express routes
var auth = require('./app/controllers/authController.js');

app.post('/auth/login', auth.login);
app.post('/auth/logout', auth.logout);
app.get('/auth/login/success', auth.loginSuccess);
app.get('/auth/login/failure', auth.loginFailure);

आपके उपयोगकर्ता मॉडल पर (उदा. ऐप/मॉडल/User.js)

मैं पासपोर्ट-स्थानीय मॉड्यूल का उपयोग कर रहा हूं, जो लॉगिन तर्क को और सरल बनाता है:https://github.com/jaredhanson/passport-local

/* Your normal user model      ----------------------*/
var mongoose = require('mongoose'),
    ObjectId = mongoose.Schema.Types.ObjectId,
    PassportLocalStrategy = require('passport-local').Strategy;

var schema = new mongoose.Schema({
    name: {type:String, required:true, trim:true},
    email: {type:String, required: true, trim: true, lowercase:true, unique: true},
    image: {type:String},
    password: {type:String, required: true },
    created: {type: Date, default: Date.now}
});

/* Auth properties      ---------------------------*/
/* (passport)           ---------------------------*/

// This is your main login logic
schema.statics.localStrategy = new PassportLocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
    },

    // @see https://github.com/jaredhanson/passport-local
    function (username, password, done){
        var User = require('./User');
        User.findOne({email: username}, function(err, user){
            if (err) { return done(err); }

            if (!user){
                return done(null, false, { message: 'User not found.'} );
            }
            if (!user.validPassword(password)){
                return done(null, false, { message: 'Incorrect password.'} );
            }

            // I'm specifying the fields that I want to save into the user's session
            // *I don't want to save the password in the session
            return done(null, {
                id: user._id,
                name: user.name,
                image: user.image,
                email: user.email,
            });
        });
    }
);

schema.methods.validPassword = function(password){
    if (this.password == password){
        return true;
    }

    return false;
}

schema.statics.serializeUser = function(user, done){
    done(null, user);
};

schema.statics.deserializeUser = function(obj, done){
    done(null, obj);
};

var model = mongoose.model('User', schema);

exports = module.exports = model;

ऐप्लिकेशन/नियंत्रक/authController.js पर

मैं सिंगल-पेज एप्लिकेशन का उपयोग कर रहा हूं, इसलिए मैं लॉगिन/लॉगआउट पर JSON लौटा रहा हूं। यदि आप कहीं और रीडायरेक्ट करना चाहते हैं, तो आपको "लॉगिन सफलता" और "लॉगिन विफलता" फ़ंक्शन (या कॉल res.render(...) या जो भी हो) को संशोधित करना होगा।

var passport = require('passport');
var AuthController = {

    // Login a user 
    login: passport.authenticate('local', {
        successRedirect: '/auth/login/success',
        failureRedirect: '/auth/login/failure'
    }),

    // on Login Success callback
    loginSuccess: function(req, res){
        res.json({
            success: true,
            user: req.session.passport.user
        });
    },

    // on Login Failure callback
    loginFailure: function(req, res){
        res.json({
            success:false, 
            message: 'Invalid username or password.'
        });
    },

    // Log out a user   
    logout: function(req, res){
        req.logout();
        res.end();
    },

};

exports = module.exports = AuthController;

अंत में, आपको अपना लॉगिन फॉर्म इंगित करना चाहिए (जिसमें method="post" . होना चाहिए विशेषता सेट) से /auth/login. लॉगिन सफल होने पर, "loginSuccess" कॉलबैक निष्पादित किया जाएगा। लॉगिन विफल होने पर, "लॉगिन विफलता" कॉलबैक निष्पादित किया जाएगा।

संपादित करें:

आप कुछ इस तरह से क्रियान्वित करके अपने mongo डेटाबेस में नए उपयोगकर्ता बना सकते हैं:

// On your main app.js file
app.post('/auth/register', auth.register);

// On your authController.js file, as per the previous example
var User = require('./app/models/User'); // The model we defined in the previous example    

...
register: function(req, res){
    User.create({name: req.body.name, email: req.body.email, password: req.body.password}, function(err){
      if (err) {
        console.log(err);
        ... // Your register error logic here
        res.redirect('/* Your error redirection path */');
        return;
      }

      res.redirect('/* Your success redirection path */'); 
    });
},
...

फिर, एक पंजीकरण फॉर्म को /auth/register पर इंगित करें। मैंने डेटा को सत्यापित नहीं किया, लेकिन उपयोगकर्ता को सहेजने का प्रयास करने से पहले आपको इसे सत्यापित करना चाहिए।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB से कनेक्ट करने के लिए स्प्रिंग का उपयोग कैसे करें जिसके लिए प्रमाणीकरण की आवश्यकता है

  2. प्रोएक्टिव मोंगोडीबी मॉनिटरिंग (डेवलपर स्टूडियो/सलाहकार कोण)

  3. स्प्रिंग डेटा MongoDB द्वारा निष्पादित प्रश्नों को कैसे लॉग करें?

  4. सरणी के अंदर सरणी के लिए मानगो धक्का

  5. MongoDB चेंज स्ट्रीम के साथ रीयल टाइम डेटा स्ट्रीमिंग