POST 请求不包含带有 Satellizer、Express 和 google 身份验证的 'body' 字段

POST request contains no 'body' field with Satellizer, Express and google auth

我正在使用包含 NodeJS/Express 背面和 AngularJS 正面的 Satellizer 开发我的第一个应用程序。我希望我的用户使用他们的 Google 帐户登录。

前端在8000端口,我是这样配置的:

app.config(function($authProvider) {
  $authProvider.google({
    url: 'http://localhost:3000/auth/google',
    clientId: 'id.apps.googleusercontent.com',
  })
});

对于后面(端口 3000),我遵循了 github 回购示例。 here

app.post('/auth/google', function(req, res) {
  var accessTokenUrl = 'https://accounts.google.com/o/oauth2/token';
  var peopleApiUrl = 'https://www.googleapis.com/plus/v1/people/me/openIdConnect';
  var params = {
    code: req.body.code,
    client_id: req.body.clientId,
    client_secret: config.GOOGLE_SECRET,
    redirect_uri: req.body.redirectUri,
    grant_type: 'authorization_code'
 };
 ...

当我点击 "log in" 按钮时,弹出窗口弹出,我可以使用我的凭据并关闭。但是我没有登录,后面有错误: '类型错误:无法读取未定义的 属性 'code'。'

一个console.log()之后,发现问题是req.body为空。这就是我被困的地方。我错过了一步吗?

以下是发送到 Express 的请求:

[1531831850948]选项/auth/google

[1531831851007]POST/auth/google

我也启用了 CORS

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

缺少上下文,但我猜你需要一个正文解析器中间件。

查看 body-parser (link),并在您的应用中像这样使用它:

const express = require('express')
const bodyParser = require('body-parser')

const app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res) {
  res.end('you posted:\n' + JSON.stringify(req.body, null, 2))
})

此示例将发回 post 有效负载。