如何解决如何正确捕获此错误和OAuth2Client?
希望您能帮到我,我有这种方法可以通过google-auth-library解码和验证用户google令牌
async function verify(token) {
const ticket = await client.verifyIdToken({
idToken: token,audience: process.env.CLIENT_ID // Specify the CLIENT_ID of the app that accesses the backend
});
const payload = ticket.getPayload();
return {
name: payload.name,email: payload.email,img: payload.picture,social: true
}
}
并且我在此端点中使用该端点,它通过正文获取google令牌,然后,如果该令牌正确,则它将返回一个令牌,或者注册一个新用户,然后返回该令牌。
const express = require('express');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken')
const User = require('../models/user.model')
const { OAuth2Client } = require('google-auth-library');//google
const app = express()
const client = new OAuth2Client(process.env.CLIENT_ID);//google
app.post('/google',(async (req,res) => {
// get the google token from the request
const token = req.body.idtoken;
// receive the google token and passes it as parameter to get the google user data
const googlelUser = await verify(token)
.catch(err => {
return res.status(403).json({
ok: false,err
});
});
// verify if the google useres already exists
User.findOne({ email: googlelUser.email },(err,userDB) => {
// if error
if (err) {
return res.status(500).json({
ok: false,err
})
}
// verify if the user is already registered using google
//and try to use the same email for normal authentication
if (userDB) {
if (userDB.google === false) {
return res.status(400).json({
ok: false,err: {
message: 'you must use normal auth for this user'
}
})
}
// if everity is ok and the user use google as signIn method
// he will get a new token
else {
const token = jwt.sign({ user: userDB },process.env.SEED_TOKEN,{ expiresIn: process.env.EXP_TOKEN });
res.status(200).json({
ok: true,user: userDB,token
})
}
} // if the user doesnt exits,we create a new user
else {
let user = new User();
user.name = googlelUser.name
user.email = googlelUser.email
user.img = googlelUser.img
user.social = true
user.password = 'googleAuth'
user.save((err,userSaved) => {
if (err) {
return res.status(500).json({
ok: false,err
});
}
const token = jwt.sign({ user: userSaved },{ expiresIn: process.env.EXP_TOKEN });
res.json({
ok: true,user: userSaved,token
})
})
}
})
}));
但是我得到的问题是
如果您发送了正确的令牌,则一切正常,但是,如果我发送了经过修改的令牌,则我的应用程序将中断,并且我不知道为什么catch不能捕获该错误并发送响应。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。