簡體   English   中英

基本認證與護照和快遞

[英]Basic auth with passport and express

我一定錯過了一些東西,但根據我發現的所有教程,這就是你使用expresspassport + passport-local對節點應用程序進行基本身份驗證的方法。 我知道這不符合最佳實踐,我只是想讓POC繼續下去:

'use strict'

var express = require('express');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy

var app = express();

var users = { 'user': 'secretpass'};

passport.use(new LocalStrategy(
    function(username, password, done) {
        console.log('Username:', username, 'password:', password);
        if (!users[username] || users[username] != password) {
            console.log('Username:', username, 'password:', password);
            return done (null, false);
        }
        return done(null, {username: username});
    }
    ));

app.use(passport.initialize());


app.get('/', function (req, res) {
    res.send ('GET request to root');
});

app.post('/', function (req, res) {
    res.send ('POST request to root');
});

app.get('/unauthorized', function (req, res) {
    res.status(200).send('GET Forbidden');
});

app.post('/unauthorized', function (req, res) {
    res.status(200).send('Post Forbidden');
});

app.post('/webhook', 
    passport.authenticate('local', { successRedirect: '/', failureRedirect: '/unauthorized'}),
    function (req, res) {
        res.send ('authenticated!');
    }
);

var server = app.listen(8081, function() {
    console.log('Server listening at', server.address().address, 'on port', server.address().port);
});

有點奇怪的是,我甚至沒有在LocalStrategy構造函數中獲取那些console.log()語句來向我展示任何東西,所以我猜我真的錯過了什么。 我嘗試使用DHC和Postman發送POST請求,

  • 將基本auth字段設置為用戶名和密碼,
  • 使用username:password @ url方法的格式,
  • 發送用戶名和密碼作為表單數據

對於基本身份驗證,您需要passport-http ,而不是passport-local (用於通過表單數據進行身份驗證)。

嘗試這個:

var BasicStrategy = require('passport-http').BasicStrategy;
...
passport.use(new BasicStrategy(...));
...
app.post('/webhook', 
  passport.authenticate('basic', {
    session         : false,
    successRedirect : '/',
    failureRedirect : '/unauthorized'
  }), function (req, res) {
    // FWIW, this isn't useful because it's never reached, because Passport
    // will always issue a redirect (either to / or to /unauthorized)
    res.send ('authenticated!');
  }
);

使用passport-http模塊進行基本身份驗證

var express = require('express');
var passport = require('passport');
var app = express();
var BasicStrategy = require('passport-http').BasicStrategy;
passport.use(new BasicStrategy(
   function (username, password, done) {
      //perform auth here for user.
      //use done(null,false) if auth fails

      done(null, {
         user: "xyz"
      });


   }
));

app.get('/app', passport.authenticate('basic', {
   session: false
}), (req, res) => {
   console.log("Hello");

   res.send('ok');
});

app.listen(4000, (err, res) => {
   console.log(err, res);
   console.log('server is launched');
})

暫無
暫無

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

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