我的 Node.Js/Express 应用程序中有一个简单的自制 API。它需要身份验证。我的问题是,如果用户已经使用正常方式(我使用 passport
本地策略)登录应用程序,我不希望用户必须通过浏览器进行身份验证(基本身份验证)。但目前情况并非如此,所以我想请你帮我写一下……
在 app.js 中,我有以下字符串:
var api2 = require('./routes/api2');
app.use('/api2', api2.auth);
在routes/api2.js中我有:
exports.auth = express.basicAuth(User.authenticate);
然后当实际请求发生时,通过
进行处理app.get('/api2/user/statements/:context?', api2.entries);
首先通过标准浏览器对话框向用户请求其用户/密码 – 基本身份验证(即使他们通过 Passport 登录到应用程序),然后才在 api2 中启动 exports.entries
。 js 文件。
我希望仅当用户未通过 Passport 登录应用程序时,才通过浏览器对话框请求用户输入用户名/密码。
最佳答案
因为有Basic/Digest authentication strategies对于 Passport,您也可以执行以下操作:
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
BasicStrategy = require('passport-http').BasicStrategy;
passport.use(new LocalStrategy(...));
passport.use(new BasicStrategy(...));
// set up your Express middlewares
// ...
app.use(passport.initialize());
// if you use passport.session(), you must have included the Express session
// middleware somewhere up above
app.use(passport.session());
// ...
// then use passport.authenticate wherever you need to protect some route(s)
// this will try the local strategy first, then basic
app.use('/api2',
passport.authenticate(['local', 'basic']));
关于javascript - Node.Js 快速身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793813/