【问题标题】:PassportJS redirect loopPassportJS 重定向循环
【发布时间】:2014-01-05 02:06:27
【问题描述】:

下面是我的代码

restify = require("restify")
passport = require("passport")
GoogleStrategy = require("passport-google").Strategy

jsonContentType = (req, res, next) ->
    res.setHeader("content-type", "application/json")
    next(req, res, next)

server = restify.createServer(
    name: "Sparked API"
)

passport.use(new GoogleStrategy({
    returnURL: "http://localhost:8080/auth/google/return"
    realm: "http://localhost:8080/"
}, (id, profile, done) ->
    done()
))

server.use(jsonContentType)

server.get("/", (req, res, next) -> 
    res.send(
        message: "hello world!"
    )
)

server.get("/auth/google", passport.authenticate("google"))

server.get("/auth/google/return", passport.authenticate("google", {
    successRedirect: "/"
    failureRedirect: "/"
}))

server.listen(8080, -> console.log("restify listening on 8080"))

看起来我得到了一个重定向循环,即使是一个非常精简的版本

server.get("/auth/google/return", passport.authenticate("google", {
    successRedirect: "/"
    failureRedirect: "/"
}))

/ 是未经身份验证的 URL,这如何导致重定向循环?我也尝试添加

server.use(passport.initialize())
server.use(passport.session())

passport.serializeUser((user, done) ->
  done(null, user)
)

passport.deserializeUser((obj, done) ->
  done(null, obj);
)

但无济于事

【问题讨论】:

    标签: javascript node.js coffeescript passport.js restify


    【解决方案1】:

    您的重定向循环正在发生,因为护照无法解析包含许多查询参数的 OpenId 响应。 Restify 有一个 bundled query parser 你可以使用。

    server.use restify.queryParser()
    

    虽然 restify 与 express 类似,但它并没有护照所期望的所有 API。主要的是res.redirect,其中is used 用于failureRedirectsuccessRedirect 选项。您需要像这样手动设置标题和状态:

    server.get "/auth/google/return", passport.authenticate("google"),
        (req, res, next) ->
            res.header 'Location', '/'
            res.send 302 # redirect status
    

    通过这两个添加,我能够让它在本地运行 (gist)

    【讨论】:

    • connect-redirectionredirect 函数添加到res。我认为这应该适用于 restify。
    • 谢谢。我将在此处添加服务器返回给我的错误,以帮助人们更轻松地在 google 中找到此解决方案:"Object HTTP/1.1 500 Internal Server Error content-type: application/json has no method 'redirect'"
    猜你喜欢
    • 2014-12-31
    • 2017-02-11
    • 2013-07-28
    • 2015-03-21
    • 2017-05-17
    • 2015-08-31
    • 2013-07-10
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多