我一直在尝试将旧式Marketplace应用转换为新的做事方式,但是当我们第一次按照通用导航链接(应用已安装到域上)时,我一直提示用户进行授权通过市场SDK上的“测试安装流程”链接。
当我要求提供' openid email'范围,出现提示,但如果我指定一个单独的范围(而不是除了' openid email')是应用程序的一部分,它不会提示用户进行身份验证(除非我要求离线访问,我想要与之前版本的功能奇偶校验,但一次只有一个问题......)。
使用google api nodejs client的示例代码:
var http = require('http');
var googleapis = require('googleapis');
var url_parse = require('url');
var OAuth = googleapis.auth.OAuth2;
var client = new OAuth(
CLIENT_ID
CLIENT_SECRET
REDIRECT_URL
);
http.createServer(dispatcher).listen(80);
function dispatcher(req, res){
res.writeHead(200, {'Content-Type': 'text/html'});
var url = url_parse.parse(req.url, true);
if(url.pathname === '/auth') {
auth_time(res);
} else if (url.pathname === '/callback') {
console.log('looking good');
client.getToken(url.query.code, function(err, tokens){
console.log(tokens);
client.setCredentials(tokens);
res.end(render_page('yep'));
});
} else {
res.end(render_page('different page'));
console.log(req.url);
}
}
function auth_time(res){
res.end(render_page('<a href="'+client.generateAuthUrl({
scope: 'openid email https://www.google.com/m8/feeds', //Prompts
// scope: 'https://www.google.com/m8/feeds', //Doesn't prompt
include_granted_scopes: 'true',
access_type: 'online'
})+'">Click for auth</a>'));
}
function render_page(contents){
return '<html><head><title>The page</title></head><body>'+contents+'</body></html>';
}
此similar question有一个答案表明https://www.googleapis.com/auth/plus.me
已添加到Marketplace SDK上使用的范围列表中,但该范围在页面刷新时被删除(我猜测它已被处理与https://www.googleapis.com/auth/userinfo.email
和https://www.googleapis.com/auth/userinfo.profile
中的一个或两个相同,它们会自动设置为范围且不可移除。