如何正确实施Net :: OpenID :: Consumer for Google登录并请求用户的电子邮件?

时间:2012-09-26 19:33:46

标签: perl openid google-openid dancer

我已经成功使用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,                                                                                                                     
    );

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

1 个答案:

答案 0 :(得分:1)

查看Google开发人员指南,您的应用程序网址应与OpenID请求中的openid.realm参数值相匹配,以便在没有授权页面的情况下顺利登录。说完这个,我想你应该指定required_root来匹配trust_root,比如 -

my $csr = Net::OpenID::Consumer->new(                                                                                                            
    ua => LWP::UserAgent->new(),                                                                                                                 
    consumer_secret => $secret,   
    required_root => "http://my.site.com"                                                                                            
);