我正在使用Satellizer开发第一个应用程序,该应用程序包含一个NodeJS / Express back和一个AngularJS front。我希望我的用户使用他们的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'
};
...
当我单击“登录”按钮时,将弹出弹出窗口,我可以使用我的凭据并将其关闭。但是我没有登录,并且后面有错误: 'TypeError:无法读取未定义的属性'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();
});
答案 0 :(得分:0)
缺少上下文,但是我猜想您需要一个身体解析器中间件。
签出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))
})
此示例将发回帖子有效载荷。