4

我已经能够成功使用 Net::OpenID::Consumer,但是当我开始请求用户的电子邮件地址时,Google 现在会提示用户授权共享他们的电子邮件地址。每次都会发生这种情况,无论用户是否选中“记住此批准”复选框。如何防止 Google 每次都提示用户批准?

我们网站的 OpenID 注册和登录路径是一样的,否则我们只能在用户注册时向 Google 请求电子邮件地址。

我会尝试发布足够多的相关代码(这是一个 Dancer 应用程序)。

my $csr = Net::OpenID::Consumer->new(                                                                                                            
    ua => LWP::UserAgent->new(),                                                                                                                 
    consumer_secret => $secret,                                                                                               
);

my $claimed_identity = $csr->claimed_identity('https://www.google.com/accounts/o8/id');

$claimed_identity->set_extension_args(
    "http://openid.net/srv/ax/1.0",
        {
            'mode' => 'fetch_request',
            'type.email' => 'http://axschema.org/contact/email',
            'required'   => 'email',
});

my $check_url = $claimed_identity->check_url(                                                                                                    
        return_to => 'http://my.site.com/openid_landing',                                                                                                                
        trust_root => 'http://my.site.com',                                                                              
        delayed_return => 1,                                                                                                                     
    );

雅虎似乎没有这个问题。我想这可能是谷歌的一个问题,但我敢打赌这是我的代码。

4

1 回答 1

1

查看 Google 开发人员指南,您的应用程序 URL 应该与openid.realmOpenID 请求中的参数值匹配,以便在没有授权页面的情况下顺利登录。话虽如此,我认为您应该指定required_root以匹配trust_root,例如-

my $csr = Net::OpenID::Consumer->new(                                                                                                            
    ua => LWP::UserAgent->new(),                                                                                                                 
    consumer_secret => $secret,   
    required_root => "http://my.site.com"                                                                                            
);
于 2012-10-05T19:49:39.330 回答