1

我从https://github.com/omab/django-social-auth获得 django social auth并按照其说明进行操作。

我正在使用google oauthyahoo auth但问题是它无法获取用户的first namelastname,所以我想用来OpenID在数据库中保存first name, last name, email, 等...但是在文档中我无法理解如何实现 id .

我还去了http://openid.net/get-an-openid/也许我可以制作一个应用程序,但我找不到如何去做。

我的问题是如何OpenID在我的 django 中启用 google 和 yahoo?

这就是我在 settings.py 中所做的

AUTHENTICATION_BACKENDS = (
    'userena.backends.UserenaAuthenticationBackend',
    'guardian.backends.ObjectPermissionBackend',
    'django.contrib.auth.backends.ModelBackend',
    'social_auth.backends.facebook.FacebookBackend',
    'social_auth.backends.twitter.TwitterBackend',
    'social_auth.backends.google.GoogleOAuthBackend',
    'social_auth.backends.google.GoogleOAuth2Backend',
    'social_auth.backends.google.GoogleBackend',
    'social_auth.backends.yahoo.YahooBackend',
    'social_auth.backends.OpenIDBackend'
)


#facebook
FACEBOOK_APP_ID              = '45252'
FACEBOOK_API_SECRET          = '234324'
FACEBOOK_EXTENDED_PERMISSIONS = ['email']
#twitter
TWITTER_CONSUMER_KEY = '234324'
TWITTER_CONSUMER_SECRET = '234234'
TWITTER_EXTENDED_PERMISSIONS = ['email']
#google
#GOOGLE_OAUTH2_CLIENT_ID = 23423#''
#GOOGLE_OAUTH2_CLIENT_SECRET = '234324'
#GOOGLE_APP_ID = '23432'
#GOOGLE_APP_KEY = '234'
#GOOGLE_SREG_EXTRA_DATA = ''#[('First name', '...')]
#GOOGLE_AX_EXTRA_DATA = ''# [('...', '...')]
#yahoo
#YAHOO_CONSUMER_KEY = '234342'
#YAHOO_CONSUMER_SECRET = '234234'

当我访问http://127.0.0.1:8000/associate/google/http://127.0.0.1:8000/associate/yahoo/它进入雅虎或谷歌的登录但它没有登录我的我的 django 项目并且当我查看我的数据库时,没有创建用户......

我认为使用OpenIDforgoogle并且yahoo不需要KEYor ID。所以它不需要app像我所做的那样facebooktwitter

我总是在我的日志中得到这个:

Generated checkid_setup request to https://www.google.com/accounts/o8/ud with assocication AMlYA9XiAAnknkW9He8EyJeKuzgFtnhl9YByYurLWutc80ZtG_5XwbOW
[02/Jun/2012 15:00:23] "GET /associate/google/ HTTP/1.1" 200 2390
Error attempting to use stored discovery information: <openid.consumer.consumer.TypeURIMismatch: Required type http://specs.openid.net/auth/2.0/signon not found in ['http://specs.openid.net/auth/2.0/server', 'http://openid.net/srv/ax/1.0', 'http://specs.openid.net/extensions/ui/1.0/mode/popup', 'http://specs.openid.net/extensions/ui/1.0/icon', 'http://specs.openid.net/extensions/pape/1.0'] for endpoint <openid.consumer.discover.OpenIDServiceEndpoint server_url='https://www.google.com/accounts/o8/ud' claimed_id=None local_id=None canonicalID=None used_yadis=True >>
Attempting discovery to verify endpoint
Performing discovery on https://www.google.com/accounts/o8/id?id=AItOawmyGFHvB71i5EXC9I1dyjOKEXxIPJtHRqM
Received id_res response from https://www.google.com/accounts/o8/ud using association AMlYA9XiAAnknkW9He8EyJeKuzgFtnhl9YByYurLWutc80ZtG_5XwbOW
No handlers could be found for logger "SocialAuth"

有人可以帮助我如何申请OpenIDgoogle参与yahoo我的 django 项目吗?

提前致谢 ....

4

1 回答 1

1

我在实现 OpenID 时也遇到了一些问题。SocialAuth 给了我错误页面,没有任何解释。

经过一番研究,我发现问题出在管道设置上。就我而言,我的 pipeline.py 出现错误。有些方法有错误,但 django 很安静,没有记录任何错误。

当我将 SOCIAL_AUTH_PIPELINE 更改为一些简单的值时,错误停止出现:

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user',
    'social_auth.backends.pipeline.associate.associate_by_email',
    'social_auth.backends.pipeline.misc.save_status_to_session',
    'social_auth.backends.pipeline.user.get_username',
    'social_auth.backends.pipeline.user.create_user',
    'social_auth.backends.pipeline.social.associate_user',
    'social_auth.backends.pipeline.social.load_extra_data',
    'social_auth.backends.pipeline.user.update_user_details',
    'social_auth.backends.pipeline.misc.save_status_to_session',
)

此设置取自 SocialAuth 自述文件。

总之,如果身份验证不起作用并且日志什么也没说,则问题可能出在管道中(在设置或方法中)。

于 2012-07-28T19:34:33.390 回答