这个咖啡脚本护照实现看起来就像我的例子,但每次都失败,从不打印“尝试策略”。我只是被重定向到“/ fail”。我尝试命名策略以及在(req,res,next)处理程序中执行它。我还验证了发布的表单在这些字段中发送了用户名和密码,并尝试根据示例使用策略中的映射重命名它们无济于事。关于我忽略的任何提示?
pass = require 'passport'
strat = require('passport-local').Strategy
exp = require 'express'
app = exp.createServer()
# Configure strategy
pass.use new strat (username, password, done) ->
#Logic to find user
console.log("Trying out the strategy")
user = {nm:username,ps:password}
done(null,user)
app.configure () ->
app.use (req,res,next) ->
console.log("GOT A REQ")
next()
app.use pass.initialize()
ops = { failureRedirect: '/fail' }
app.post '/auth', pass.authenticate('local',ops), (req, res, next) ->
console.log "what about here"
app.listen 1337
解决方案修改快速配置:
app.configure () ->
app.use exp.bodyParser()
答案 0 :(得分:4)
原来这个问题是由于我对快递的无知。我发送了用户名和密码,但没有解析它 - app.configure需要express.bodyParser()才能使用这些策略。
答案 1 :(得分:1)
如果您被重定向到/失败,它会告诉我Passport正在处理请求并且身份验证不成功。也许是一个愚蠢的建议,但你是否在发布一个包含username
和password
字段的表单?如果其中任何一个不存在,那就是本地策略中的主要失败案例。
答案 2 :(得分:0)
我发现咖啡脚本的东西令人难以置信地阅读(也许发布已编译的JS版本,除非有人比我更好地阅读咖啡渣)。无论如何,假设您调用pass.authenticate的语法是正确的(我通常使用自定义回调来调用它来处理响应),这两个突出的事情是:
1)您没有passport.serializeUser和deserializeUser设置。
2)除非你使用session调用authenticate:false并进行自己的会话设置,我认为需要加载和配置连接/表达会话。