我有一个Vuejs应用程序,我试图添加谷歌认证。我使用这个插件https://www.npmjs.com/package/vue-google-oauth2在前端生成授权代码,然后将其发送到我的后端,以便它可以获得用户凭据。
以下是前端的代码:
<script>
import axios from "axios";
export default {
methods: {
googleAuth() {
this.$gAuth
.getAuthCode()
.then(authCode => {
//on success
axios.post('my-back-end', {code:authCode, redirect_uri: 'postmessage'}).then(res=>{
console.log(res);
});
})
.catch(error => {
//on fail do something
});
}
}
};
</script>
在此之前,我成功地获取了授权代码,并将其发送到使用node编写的后端。js基于官方谷歌文档。https://github.com/googleapis/google-api-nodejs-client#oauth2-客户
我有这条路线:
router.post('/google', googleController.getGoogleAccountFromCode);
该控制器:
const {google} = require('googleapis');
const oauth2Client = new google.auth.OAuth2(
process.env.GOOGLE_CLIENT_ID,
process.env.GOOGLE_CLIENT_SECRET,
process.env.GOOGLE_REDIRECT_URL
);
exports.getGoogleAccountFromCode = (req, res, next) => {
const code = req.body.code;
const data = oauth2Client.getToken(code)
.then(res => {
console.log(res);
})
.catch(err=>{
console.log(err);
});
};
我得到这个错误:
{错误:进程中Gaxios.request(/home/monkeydkon/Desktop/tabata rest/node_modules/Gaxios/build/src/Gaxios.js:70:23)处的_请求无效。_tickCallback(internal/process/next_tick.js:68:7)响应:{config:{method:'POST',url:'https://oauth2.googleapis.com/token,数据:'code=4/lggdaumbzrceo1grav2csrbqkmoqfm7ikhbup3tjvf2nsp2nbqbdc9mdqiuam847zipy6mz4mghld9fr2a3a_Q
我真的无法理解谷歌文档。对oauth2没有适当的支持。我真的需要一些帮助。谢谢
我以前也遇到过这个问题。你的前端代码看起来不错。您只是缺少后端上的一些内容。
尝试将控制器更改为此
const {google} = require('googleapis');
exports.getGoogleAccountFromCode = (req, res, next) => {
const code = req.body.code;
const oauth2Client = new google.auth.OAuth2(process.env.GOOGLE_CLIENT_ID, process.env.GOOGLE_CLIENT_SECRET, 'postmessage');
google.options({ auth: oauth2Client });
oauth2Client.getToken(code).then(res => {
const tokens = res.tokens;
oauth2Client.setCredentials(tokens);
const oauth2 = google.oauth2({ version: 'v2' });
return oauth2.userinfo.get();
})
.then(userData => {
console.log(userData);
})
.catch(err => {
console.log(err);
});
};
实际上你错过的只是谷歌。选项
。然后,提取令牌和用户信息。你应该可以用它们做你想做的事。
测试时也不要忘记(例如:POSTMAN)每次尝试总是发送一个新的code
。
我已经开始在一个简单的node.js应用程序中使用Q Promise包。所以我对如何在所有Promise序列完成后关闭数据库连接感兴趣。 例子: 我想在显示集合名称后关闭连接,但此匿名函数中没有db上下文。 有没有办法用promise模式处理此类案件?
最近我用budo部署了一个node.js服务器端应用程序,它工作正常...但是在部署到Azure(WebAPP)后,它不起作用,并抛出“需要”未定义的错误。我使用VSCode开发项目
这是我的模型。 这是我的控制器用户。js: app.post('/Signup/',函数(req, res){{console.log(req.body.username); User.new用户( 这个概念是一旦用户名/密码被接受,一个API密钥将与用户名一起存储。虽然,用户名负载正在被接受,但是当我执行UserApiSchema调用来生成api时,没有生成这样的api。也没有错误。
问题内容: 我正在使用Angular JS和Node JS开发应用程序,我需要查看用户机器中所有可用的打印机,让用户选择其中一台并打印收据。 有没有办法做到这一点? 问题答案: 我做了一个这样的应用程序。我使用http://nwjs.io/和注释中的模块来完成它:https : //www.npmjs.com/package/printer,这是该模块打印的有效代码在默认打印机中原始文件: 您可以
我有: 它记录了: 我不明白为什么会这样。
请帮我解决以下问题。我创建了默认节点。使用Visual Studio nodejs工具和express的js应用程序,现在我尝试调用在node中声明的setTimeout函数。d、 ts.代码如下: 但是代码没有编译,表示无法将“Number”转换为“NodeTimer” 据我所知,问题是它需要标准的setTimeout函数,而不是从节点获取函数。d、 ts。 我尝试指定对节点的引用。d、 带<代