Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs passport始终指向失败URL_Node.js_Facebook_Coffeescript_Passport.js - Fatal编程技术网

Node.js nodejs passport始终指向失败URL

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

我使用passport允许通过Facebook登录我的网站。一切似乎都很好,但Facebook网站的回调总是转到failureRedirect,即使我用有效令牌从Facebook获得所有数据。你知道为什么会这样吗

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
函数。它可能抛出了一个异常。