首页 > 解决方案 > 使用 Google API OAuth 2.0 在 passport.js 中实现增量授权

问题描述

我目前正在使用 passport.js 和来自 passport-google-oauth20 的策略,我想实现增量授权。我使用 yarn 作为我的包管理器,我的服务器也使用 Nodejs 和 Express 包。

当用户首次登录时,我只需要他们的基本 gmail 信息,例如他们的电子邮件地址,因此我指定了“电子邮件”范围:

router.get('/', 
    passport.authenticate('google', {
    hd: '(my domain)',
    scope: ['email'],
    accessType: 'offline',
    prompt: 'consent'
}));

当他们在不同的页面上时,他们可以请求站点从他们的帐户发送电子邮件,因此我现在需要将“ https://www.mail.google.com ”范围添加到会话中。我在passport.js网站上找不到任何文档,谷歌上有一个页面,但我不认为这是设置,因为我使用的是passport.js。我试过使用

router.post('/sendEmail',
passport.authenticate('google', {
    hd: '(my domain)',
    scope: ['https://www.mail.google.com'],
    accessType: 'offline',
    include_granted_scopes: true,
    prompt: 'consent',
    failerRedirect: '/auth',
    successRedirect: '/google/authorizedSendEmail'
}));

但我得到了错误

无法加载https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&prompt=consent&hd=(myDomain)&response_type=code&redirect_uri=(myCallbackURL)&scope=https%3A%2F%2Fwww.mail.google .com%2Fauth%2Fuserinfo.email&client_id=(usersID).apps.googleusercontent.com

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,来源“(我的域)”不允许访问。

请求时。

如果我在初始范围中包含“ https://www.mail.google.com ”并且没有第二次身份验证调用,那么它确实有效;从用户的帐户发送一封电子邮件。但是,这当然不是增量授权。

另外,我认为增量授权应该有自己的标签,但我没有代表这样做,有人可以添加吗?

标签: google-apigmailpassport.jsgoogle-oauth

解决方案


推荐阅读