connect-auth с экспрессом в CoffeeScript

У меня есть пример для подключения-аутентификации и Google OAuth2, но я не могу заставить его работать в моем собственном коде. Каким-то образом я получаю access_token от Google, но когда я пытаюсь получить данные через curl с токеном доступа, появляется ошибка 401 — в вашем запросе произошла ошибка. Такой же ответ я получаю от Google, когда использую код примера, но что-то должно быть не так с токеном?

Я хотел бы использовать промежуточное программное обеспечение, так как мне нужна аутентификация во всем проекте. Кроме того, я использую экспресс-маршрутизатор вместо коннект-маршрутизатора. Вот код:

express     = require 'express'
app         = module.exports = express.createServer()
connect     = require 'connect'
auth        = require 'connect-auth'
store       = require('connect-redis')(express)
keys        = require './keys_file'
routes      = require("./routes")

auth_middleware = ->
  (req, res, next) ->
    urlp = url.parse(req.url, true)
    if urlp.query.login_with
      req.authenticate [ urlp.query.login_with ], (error, authenticated) ->
        if error
          console.log error
          res.end()
        else
          next()  unless authenticated is `undefined`
    else
      next()

app.configure ->
  app.set 'views', __dirname + '/views'
  app.set 'view engine', 'jade'
  app.use connect.logger()
  app.use express.bodyParser()
  app.use express.cookieParser()
  app.use express.session({ secret: 'keyboard cat', store: new store })
  app.use express.static(__dirname + '/public')
  app.use auth({strategies: [
    auth.Twitter({  consumerKey: keys.twitterConsumerKey, consumerSecret: keys.twitterConsumerSecret}),
    auth.Google2({  appId : keys.google2Id, appSecret: keys.google2Secret, scope: "email", callback: keys.google2CallbackAddress})
  ], trace: true})
  app.use auth_middleware
  app.use app.router

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

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

app.dynamicHelpers
  session: (req, res) ->
    return req.session

app.dynamicHelpers
  messages: require 'express-messages'

app.get /.*/, routes.index

app.listen 3000

console.log 'Express server listening on port %d in %s mode', app.address().port, app.settings.env

Маршрутизация index.js:

exports.index = function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'})
  if( req.isAuthenticated() ) {
    res.end( authenticatedContent.replace("#USER#", JSON.stringify( req.getAuthDetails().user )  ) );
  } else {
     res.end( unAuthenticatedContent.replace("#PAGE#", req.url) );
  }
};

person Patrick    schedule 27.10.2011    source источник


Ответы (1)


Я не знаю кофескрипт, но:

auth_middleware = ->
  (req, res, next) ->
    urlp = url.parse(req.url, true)
    if urlp.query.login_with
      req.authenticate [ urlp.query.login_with ], (error, authenticated) ->
        if error
          console.log error
          res.end()
        else
          next()  unless authenticated is `undefined`
   else
      next()

должно быть :

auth_middleware = (req, res, next)->
  urlp = url.parse(req.url, true)
  if urlp.query.login_with
    req.authenticate [ urlp.query.login_with ], (error, authenticated) ->
      if error
        console.log error
        res.end()
   else
    next()  unless authenticated is `undefined`

иначе следующий()

Я думаю, что большая проблема заключается в том, что вы отправляете «сферу», попробуйте:

    auth.Google2({  appId : keys.google2Id, appSecret: keys.google2Secret, callback: keys.google2CallbackAddress})
person ciaranj    schedule 27.10.2011