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 有效负载。
我正在使用包含 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 有效负载。