Passportjs处理HTTP API的访客authentication

这是我的代码:

passport = require 'passport' BasicStrategy = require('passport-http').BasicStrategy passport.use new BasicStrategy((username, pwd, done) -> console.log arguments if pwd is "1234" and username is "Foo" done undefined, { username: "Foo" role: "admin" } else done() ) express = require("express") app = express() app.use express.logger() app.use passport.initialize() app.use passport.authenticate("basic", session: false) app.get '/', (req, res) -> res.send req.user 

但是用这种方式,只有当用户使用标题进行authentication时才有效 。 当没有指定授权头时,我只在'/'上得到401。 有没有办法使authentication可选? 或者指定一个授权说“你好,我是客人”的一个平静的方式?

如果Authorization标头丢失 , passport-http中间件将调用fail()

您可以编写自己的身份validation策略,或者分叉和修改passport-http ,或者添加一个中间件,如果缺less即可添加标头。

 GUEST = "Basic #{new Buffer('guest:guest').toString('base64')}" app.use (req, res, next) -> req.headers['authorization'] = GUEST unless req.headers['authorization'] next() 

您需要在调用app.use(passport...)之前添加此中间件。 然后在战略中,你可以做例如。

 passport.use new BasicStrategy (user, pass, done) -> if user == pass == 'guest' done null, {username: 'Guest'} else ...