护照和快递的基本授权
Basic auth with passport and express
我一定错过了一些东西,但根据我找到的所有教程,这就是使用express
和passport
+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请求
- 将基本身份验证字段设置为用户名和密码
- 使用格式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');
})
相关文章:
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 为什么我的解析云代码请求'未经授权'
- 如何将权限/授权数据传递到客户端Javascript
- Twitter API在jQuery AJAX中设置授权头
- 如何在网络应用程序中使用Firebase进行用户授权
- 检查用户是否在Orchard CMS中获得授权
- 编写JavaScript库:如何授权方法
- Node.js和angular用户授权
- 使用Router()参数进行快递
- 快递.js无法获取我的 CSS 文件
- 应用程序引擎终结点:用于OAuth2授权的Javascript客户端库需要多个弹出窗口
- 快递.js - 如何检查标头是否已发送
- 如何在快递中制作中间件的动态链.js
- 快递之间的区别.路由器() vs 多个 express() 对象
- 使用声明式授权的“without_access_control”与 Cucumber 的@javascript
- 有没有办法使用浏览器从 RESTful 网络服务下载文件,该文件要求授权标头
- 快递.js开机自检空要求正文
- 使用没有翡翠的快递时的潜在问题
- 如何从按钮调用LinkedIn授权javascript
- 护照和快递的基本授权