(使用序列化功能更新的代码-仍然重定向到/failedRedirect)
我试图使用passport包进行简单的用户名/密码身份验证,但失败了。 在下面的示例中,我尝试验证身份验证是否有效,方法是始终返回有效的身份验证(无论传递什么),但出于某种原因它失败了,并且passport重定向到登录失败的链接。
如果有人可以帮助我弄清楚如何使此示例仅身份验证任何内容,我应该能够从那里管理。
coffeescript 中的代码:
express = require "express"
passport = require "passport"
LocalStrategy = require("passport-local").Strategy
passport.use(new LocalStrategy( (username, password, done) ->
console.log "LocalStrategy invoked"
done(null, {id: 1, name: "Marius"})
))
passport.serializeUser (user, done) ->
done null, user
passport.deserializeUser (obj, done) ->
done null, obj
app = express.createServer()
app.configure ->
app.use express.bodyParser()
app.use express.static("./public")
app.use express.cookieParser("SOMESECRET")
app.use express.session
secret: "SOMESECRET"
cookie:
maxAge: 60000
app.use passport.initialize()
app.use passport.session()
app.set "view", "./srv/views"
app.set "view engine", "jade"
app.get "/login", (req, res) ->
res.send "login page"
app.post "/login", passport.authenticate("local",
failureRedirect: "/failedRedirect"
successRedirect: "/successRedirect"
failureFlash: true)
app.listen 8082
已解决: 好的,我相信有几个原因导致我不能让它正常工作。序列化可能是其中之一(我还没有测试过),但由于Jared说他们是必需的,我会留下它们(他是Passport的作者)。另一个混淆可能与express版本以及我的npm混淆有关。我相信我测试了最新的v2和v3版本的express,但现在我正在运行v3,对于版本三,您可能还应该在Github上查看connect-flash
模块,因为在Jared的示例中使用的一些“flash”内容已从express v3中移出(因此该模块将其放回...)。最后,请确保使用正确命名的输入名称进行发布(默认情况下为username
和password
)。
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
挂载上去可能有所帮助,看看是否抛出任何异常。 - Jared Hanson