3

バックボーン アプリで Passport.js を使用して、Facebook アプリで認証しようとしています。クライアントの href-tag を介してルート /auth/facebook を機能させることができます。

しかし、ajaxを介して認証を行いたいです。認証メソッドを呼び出す Express.js ルートを作成しようとしました。認証が呼び出されることはないようです。

express = require('express')
routes = require('./routes')
mongo = require('mongoskin')
crypto = require('crypto')
fs = require('fs')

passport = require('passport')

FBStrategy = require('passport-facebook').Strategy
LocalStrategy = require('passport-local').Strategy

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

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

fb = new FBStrategy
    clientID: ''
    clientSecret: ''
    callbackURL: 'http://localhost:8811/auth/facebook/callback'
    (accessToken, refreshToken, profile, done) ->
        console.log 'accesstoken', accessToken
        console.log 'profile', profile
        user = {}
        done(null, user)


passport.use fb

logErrors = (err, req, res, next)->
    console.error(err.stack)
    next(err)

clientErrorHandler = (err, req, res, next)->
    if req.xhr
        res.send 500, error: 'something blew up'
    else
        next(err)

errorHandler = (err, req, res, next)->
    res.status 500
    res.render 'error', {error: err}

app.configure ()->
  app.set 'views', __dirname + '/views'
  app.set 'view engine', 'jade'
  app.set 'name','tapuna'
  app.use express.bodyParser({uploadDir: './uploads'})
  app.use express.methodOverride()
  app.use express.cookieParser()
  app.use express.session({secret: 'tapcat'})
  app.use passport.initialize()
  app.use passport.session()
  app.use express.favicon()
  app.use logErrors
  app.use clientErrorHandler
  app.use errorHandler
  app.use express.static(__dirname + '/public.optimized')
  app.use app.router


app.configure 'development', () ->
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }))

app.configure 'production', () ->
  app.use(express.errorHandler())


# this route works fine
app.get '/auth/facebook', passport.authenticate('facebook', {scope:['email']})
# this one also
app.get '/auth/facebook/callback', passport.authenticate('facebook', {successRedirect:'/', faiureRedirect: '/login'})

# the 'ajax route'
app.post('/fb_login',
    (req,res,next)->
        console.log 'fb_login called' # i see this one
        passport.authenticate('facebook',{scope:['email']}, (err,user,info)->
            console.log 'fb'  # but i never see this one
        )(req, res, next)
    ,
    (err, req,res,next)->
        console.log 'err', err
        res.send status: 'err', message: err
)

助けていただければ幸いです。

4

1 に答える 1

0

ajax 経由で認証することはできません。OAuth では、ユーザーを認証サーバーにリダイレクトする必要があります。これは、OAuth フローの重要なステップです。あなたのajax呼び出しはリダイレクトを行いますが、ブラウザにないため、ユーザーには表示されません。

于 2012-11-27T21:02:00.730 に答える