[英]Google Auth with Node.js using Typescript and Promise syntax
I am trying to implement google authentication using this tutorial: https://blog.prototypr.io/how-to-build-google-login-into-a-react-app-and-node-express-api-821d049ee670我正在尝试使用本教程实现谷歌身份验证: https://blog.prototypr.io/how-to-build-google-login-into-a-react-app-and-node-express-api-821d049ee670
but with Typescript and Promise syntax( these are the requirements) and I am getting this error:但使用 Typescript 和 Promise 语法(这些是要求),我收到此错误:
This is the code:这是代码:
import { HttpRequest, HttpResponse } from 'src/adapters/http';
import { OAuth2Client } from 'google-auth-library';
import { config } from './../../../config';
const client = new OAuth2Client(config.auth.google.id);
export const makeLoginUser = () => {
return (httpRequest: HttpRequest, httpResponse: HttpResponse) => {
new Promise(async (resolve, reject) => {
const { tokenId } = httpRequest.body;
console.log(tokenId);
try {
const ticket = await client.verifyIdToken({
idToken: tokenId,
audience: config.auth.google.id,
});
const { name, email, picture } = ticket.getPayload();
resolve(httpResponse.status(200).send(email));
} catch (error) {
reject(httpResponse.status(429).send('Invalid request'));
}
});
};
}; };
I had same error and solved it like this:我有同样的错误并像这样解决它:
import { Request, Response } from 'express'
import { OAuth2Client } from 'google-auth-library';
import UserModel from './../models/user';
var jwt = require('jsonwebtoken')
// @desc Login with google
// @route POST /api/user/google-login
// @access Public
const client = new OAuth2Client(process.env.GOOGLE_CLIENT_ID)
export const signInWithGoogle = async (req: Request, res: Response) => {
const { idToken } = req.body
const ticket = await client.verifyIdToken({
idToken,
audience: process.env.GOOGLE_CLIENT_ID
}).then((response) => {
if (response.getPayload() && response.getPayload()?.email_verified) {
const email = response.getPayload()?.email
const name = response.getPayload()?.name
UserModel.findOne({ email }).exec((err, user) => {
if (user) {
const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, {
expiresIn: "7d",
})
const { _id, email, name, role } = user
return res.json({
_id,
name,
email,
role,
token
})
} else {
const password = `${email}${process.env.JWT_SECRET}`
user = new UserModel({ name, email, password });
user.save((err, data) => {
if (err) {
console.log("ERROR GOOGLE LOGIN ON USER SAVE", err)
return res.status(400).json({
error: "Google Login Failed"
})
}
const token = jwt.sign(
{ _id: data._id },
process.env.JWT_SECRET,
{
expiresIn: "7d"
}
)
const { _id, email, name, role } = data
return res.json({
_id,
name,
email,
role,
token
})
})
}
})
}
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.