我想根据谷歌的访问令牌为我的路由控制器使用保护,但我不知道如何实现。
我从我的 google oauth 中检索到这个
{
"message": "User information from google",
"user": {
"email": "test@gmail.com",
"firstName": "John",
"lastName": "Kennedy",
"picture":
"https://lh3.googleusercontent.com/a-/mypicture",
"accessToken": "myaccesstoken"
}
}
现在我不知道如何将此访问令牌用于我的其他路由,例如在控制器中:
@UseGuards() // I don't know what to put here
@Get('/get_customer/:id')
async findCustomerById(@Param() params): Promise<Customer> {
try {
return await this.stripeService.findCustomerById(params.id);
} catch (e) {
throw new Error(e.message);
}
}
简短回答:
在 google 的重定向端点中,您可以向用户发出 JWT 令牌,它将他们的数据作为有效负载保存,并使用 JWT 验证保护来保护您的端点。见 this
长答案:
谷歌基本上所做的只是为您的应用程序提供使用该服务登录的用户的身份......具体来说,谷歌为您提供用户的数据(具有您定义的范围)和访问令牌。
此时,您有多种方法来保护您的路线:
2.存储该用户的会话,其中包含您从谷歌获得的数据,并为他们提供 SessionId,这将使您(服务器)稍后识别用户并授予他们访问路由的权限(有状态方式:您需要存储会话数据某处)。
您可能想知道在所有这些中访问令牌的用途是什么...通常,此令牌只能由您的应用程序(您从谷歌获得的 ClientId+ClientSecret)使用来访问用户的谷歌数据(由您选择的范围定义)代表他们。所以基本上这个令牌是用户的同意,所以你的应用可以访问他们的谷歌数据。
例如,如果您不能将用户的数据存储在我们的数据库中(出于法律原因),这可能很有用,因此您可以直接从谷歌查询他们的数据,而无需每次都咨询他们。