Microsoft Graph API with Simple-OAuth2 and Client Credentials Flow
我正在尝试在NodeJS网站中使用Simple-OAuth2登录具有客户端凭据流的用户。
我的路线/index.js是这样的:
1 2 3 4 5 6 7 8 9 10 11 | var express = require('express'); var router = express.Router(); var authHelper = require('../helpers/auth'); router.get('/', async function(req, res, next) { let parms = { title: 'Home', active: { home: true } }; const accessToken = await authHelper.accessToken; res.render('index', parms); }); module.exports = router; |
我的auth.js是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | const credentials = { client: { id: process.env.APP_ID, secret: process.env.APP_PASSWORD, }, auth: { tokenHost: 'https://login.microsoftonline.com', authorizePath:"common/oauth2/v2.0/authorize", tokenPath:"common/oauth2/v2.0/token", } }; const oauth2 = require('simple-oauth2').create(credentials); const tokenConfig = { username: '[email protected]', password: 'ppppppp', scope: process.env.APP_SCOPES, }; try { const result = await oauth2.ownerPassword.getToken(tokenConfig); const accessToken = oauth2.accessToken.create(result); } catch (error) { console.log('Access Token Error', error.message); } exports.accessToken = accessToken; |
当我尝试启动网站时,nodejs向我显示了一个sintax错误:
1 2 3 | const result = await oauth2.ownerPassword.getToken(tokenConfig); ^^^^^ SyntaxError: await is only valid in async function |
这个错误对我来说意义不大,因为代码是由simple-oauth2提供的。
有人可以阐明我的实际错误吗?
那么您必须将代码包装到
在您的情况下,我会将代码包装到函数中并按如下所示导出该函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | const credentials = { client: { id: process.env.APP_ID, secret: process.env.APP_PASSWORD, }, auth: { tokenHost: 'https://login.microsoftonline.com', authorizePath:"common/oauth2/v2.0/authorize", tokenPath:"common/oauth2/v2.0/token", } }; const oauth2 = require('simple-oauth2').create(credentials); const tokenConfig = { username: '[email protected]', password: 'ppppppp', scope: process.env.APP_SCOPES, }; const getAccessToken = async () => { try { const result = await oauth2.ownerPassword.getToken(tokenConfig); const accessToken = oauth2.accessToken.create(result); return accessToken; } catch (error) { console.log('Access Token Error', error.message); return null; } }; exports.getAccessToken = getAccessToken; |
然后您可以像这样使用该功能:
1 2 3 4 5 6 7 8 9 10 11 | var express = require('express'); var router = express.Router(); var authHelper = require('../helpers/auth'); router.get('/', async function(req, res, next) { let parms = { title: 'Home', active: { home: true } }; const accessToken = await authHelper.getAccessToken(); res.render('index', parms); }); module.exports = router; |