簡體   English   中英

如何使用node.js + Express + Mongodb進行表單身份驗證?

[英]How to do form Authentication using node.js+Express+Mongodb?

我正在嘗試使用Node.js + Express + MongoDb.Created登錄頁面來做小型應用程序。 現在我要從登錄頁面發布數據,並根據數據庫驗證用戶名和電子郵件。 我不知道該怎么做。 我的登錄頁面視圖(翡翠):

extends layout
body
    block content
     .container
             form.form-signin(action="/login", method="post")
             h2.form-signin-heading Please sign in
             input.input-block-level(type="text", name="username", placeholder="username")
             input.input-block-level(type="text", name="text", placeholder="user mail")
             label.checkbox.
               <input type="checkbox" value="remember-me" /> Remember me
             button.btn.btn-large.btn-primary(type="submit") Sign in

index.js

         router.post('/login', function(req, res, next) {
         var uname=req.body.username;
         var email=req.body.email;
         var db = req.db;
         var collection = db.get('userlist');
              if(check with database uname and email present or not)
              {
                 //if true
                 res.render('index', { title: 'Express' });
              }
              else
              {
                 //render loginpage with error msg
                 res.render('login', { title: 'Express' });
              }
         });

請幫忙。

有很多方法可以達到目標。 我可以向您推薦以下內容。

  1. 使用Passport.js
  2. 使用令牌認證

Passport.js方式

  • 安裝護照npm
  • 配置本地登錄策略
  • 安裝加密模塊以加密輸入的密碼並存儲在數據庫中
  • 使用加密模塊比較密碼
  • 創建驗證傳入密碼的方法

這是下面的鏈接

  1. Passport.js: http//passportjs.org/docs
  2. 加密模塊:npm install bcrypt

代碼示例:

//User Schema
/*
 * Generate Hash to save password
 */
userSchema.methods.generateHash = function (password) {
    // some service to encrypt and check passwords
    return encryptService.encrypt(password);
};

/*
 * Check if password is valid
 */
userSchema.methods.validPassword = function (password) {
    var user = this;
    var checkPasswordParams = {
        password: password,
        hash: user['authentication']['hash']
    };
    // some service to encrypt and check passwords
    return encryptService.compare(checkPasswordParams);
};

//encrypt service
//here are examples from bcrypt page
bcrypt.hash("bacon", null, null, function(err, hash) {
// Store hash in your password DB.
});

bcrypt.compare("bacon", hash, function(err, res) {

});
bcrypt.compare("veggies", hash, function(err, res) {

});


//Example Of Passport Local Strategy (Username + Password) 
var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

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

令牌方式

在這里您可以找到令牌認證的好例子:

https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

我建議使用此npm模塊來創建和檢查令牌:

npm安裝jwt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM