0

这个咖啡脚本护照实现看起来就像我的例子,但每次都失败并且从不打印“尝试策略”。我只是被重定向到“/失败”。我尝试命名策略并在 (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

解决 方法 修改 express 配置:

app.configure () ->
    app.use exp.bodyParser() 
4

3 回答 3

4

原来这个问题是由于我对快递的无知。我正在发送用户名和密码,但没有解析它 - app.configure 需要 express.bodyParser() 才能使用这些策略。

于 2012-06-06T01:24:07.720 回答
1

如果您被重定向到 /fail,这表明 Passport 正在处理请求并且身份验证不成功。也许是一个愚蠢的建议,但你是在发布一个带有usernamepassword字段的表单吗?如果其中任何一个都不存在,则这是本地策略中的主要失败案例。

于 2012-06-05T17:04:09.080 回答
0

我发现咖啡脚本的内容令人难以置信的混乱阅读(也许也发布编译后的 JS 版本,除非有人比我更好地阅读咖啡渣)。无论如何,假设您调用 pass.authenticate 的语法是正确的(我通常使用处理响应的自定义回调来调用它),突出的两件事是:

1)您没有 passport.serializeUser 和 deserializeUser 设置。

2) 除非您使用 session:false 调用身份验证并进行自己的会话设置,否则我认为需要加载和配置连接/快速会话。

于 2012-06-05T04:29:03.690 回答