Node.js nodejs passport始终指向失败URL
我使用passport允许通过Facebook登录我的网站。一切似乎都很好,但Facebook网站的回调总是转到failureRedirect,即使我用有效令牌从Facebook获得所有数据。你知道为什么会这样吗Node.js nodejs passport始终指向失败URL,node.js,facebook,coffeescript,passport.js,Node.js,Facebook,Coffeescript,Passport.js,我使用passport允许通过Facebook登录我的网站。一切似乎都很好,但Facebook网站的回调总是转到failureRedirect,即使我用有效令牌从Facebook获得所有数据。你知道为什么会这样吗 express = require "express" passport = require 'passport' FBStrategy = require('passport-facebook').Strategy Properties = require "./config.jso
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}"
您需要在策略的verify回调中提供一个用户。大概是这样的:
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)
您可以在指南中阅读有关验证回调的更多信息:谢谢!这解决了我的问题。在调用done()之后,我想我需要做一些用户的事情。传递
done(null,0)
对我来说很有效。但传递“{}”会产生以下错误:“500错误:无法将用户序列化到会话”我会检查您是否是serializeUser
函数。它可能抛出了一个异常。