【问题标题】:nodejs passport always going to failure URLnodejs护照总是会失败URL
【发布时间】:2012-09-22 19:35:26
【问题描述】:

我正在使用护照在我的网站上通过 Facebook 登录。一切似乎都很好,但是即使我使用有效令牌从 Facebook 取回所有数据,来自 Facebook 网站的回调总是会转到 failureRedirect。关于为什么会发生这种情况的任何想法?

express = require "express"
passport = require 'passport'
FBStrategy = require('passport-facebook').Strategy
Properties = require "./config.json"

FB_APP_ID = REMOVED
FB_APP_SECRET = REMOVED

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

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

fb = new FBStrategy  
  clientID: FB_APP_ID
  clientSecret: FB_APP_SECRET
  callbackURL: "http://localhost/auth/facebook/callback"
  (accessToken, refreshToken, profile, done) ->
    console.log "accesToken ", accessToken
    console.log "refreshToken", refreshToken
    console.log "profile", profile
    done()

passport.use fb

app = module.exports = express.createServer()
app.Properties = Properties

console.log "starting server"
app.configure ->
  app.set "views", "./views"
  app.set "view engine", "jade"
  app.set "view options", layout: false
  app.use express.methodOverride()
  app.use (express.static "#{__dirname}")
  app.use express.cookieParser()
  app.use express.bodyParser()
  app.use (express.session secret: REMOVED, key: REMOVED)
  app.use passport.initialize()
  app.use passport.session()
  app.use app.router

app.configure "development", ->
  app.listen Properties.Port


app.get "/", (request, response) -> 
  { session: Session } = request
  response.render "index"

app.get "/account", (request, response) -> 
  { session: Session } = request
  response.render "account"

app.get "/login", (request, response) -> 
  { session: Session } = request
  response.render "login", {user:request.user}

app.get "/auth/facebook", passport.authenticate 'facebook'

app.get "/auth/facebook/callback", passport.authenticate ('facebook', {failureRedirect: "/login"}), (req, res) ->
  res.redirect "/account"


console.log "server is ready and listening on port #{Properties.Port}"

【问题讨论】:

    标签: node.js facebook coffeescript passport.js


    【解决方案1】:

    您需要在策略的验证回调中提供用户。像这样的:

    fb = new FBStrategy  
      clientID: FB_APP_ID
      clientSecret: FB_APP_SECRET
      callbackURL: "http://localhost/auth/facebook/callback"
      (accessToken, refreshToken, profile, done) ->
        console.log "accesToken ", accessToken
        console.log "refreshToken", refreshToken
        console.log "profile", profile
        user = {} // find or create a user in your database
        done(null, user)
    

    您可以在指南中阅读有关验证回调的更多信息:http://passportjs.org/guide/configuration.html

    【讨论】:

    • 谢谢!这解决了我的问题。我在想我需要在调用 done() 之后做用户的事情。
    • 传递done(null, 0) 为我工作。但是传递 '{}' 给出了这个错误:“500 Error: failed to serialize user into session”
    • 我会检查你是 serializeUser 函数。它可能会引发异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2017-01-15
    • 2012-09-13
    • 1970-01-01
    • 2017-12-22
    • 2023-04-06
    相关资源
    最近更新 更多