2012-12-03 48 views
4

我的確看到了一些類似的問題,但他們似乎並沒有回答我遇到的問題。在django allauth中,我如何從OpenId登錄/ Google獲取用戶名?

到目前爲止,我一直在做manage.py runserver,在本地運行。

一開始我嘗試只是把這個在我的settings.py:

import allauth 
ACCOUNT_EMAIL_REQUIRED = True 

然後試圖將其擴展到:

import allauth 
ACCOUNT_EMAIL_REQUIRED = True 
ACCOUNT_AUTHENTICATION_METHOD = "username_email" 
ACCOUNT_USERNAME_REQUIRED = True 
SOCIALACCOUNT_AUTO_SIGNUP = True 

但是當我試圖用我的谷歌帳戶登錄(即,在openId-googlem下不是直的谷歌),我可以看到它得到我的電子郵件,但它不使用我的電子郵件。在回調函數中,我試圖在一堆打印報表的堅持,它看上去像它拉這從返回URL時,我打印user.__dict__

{'_state': <django.db.models.base.ModelState object at 0x101604dd0>, 
'date_joined': datetime.datetime(2012, 12, 3, 4, 35, 41, 949526, tzinfo=<UTC>), 
'email': u'[email protected]', 
'first_name': '', 
'id': None, 
'is_active': True, 
'is_staff': False, 
'is_superuser': False, 
'last_login': datetime.datetime(2012, 12, 3, 4, 35, 41, 949506, tzinfo=<UTC>), 
'last_name': '', 
'password': '', 
'username': ''} 

也就是說,它填充電子郵件字段,而不是username字段。我認爲默認情況下,allauth會將username填入CORRECT_USERNAME,但它看起來是空的。 然後,當我打印出該帳戶時,我在user_id字段中看不到任何內容。

當我跳到配置文件頁面時,它將username列爲「用戶」,看起來像是絕對回退/默認設置。也就是說,這樣的:

{% user_display user %} 
<p>Another try... <br /> 
{{user.username}} 
<p>---------------------------</p> 
{{ user.account_provider }} 
<p>---------------------------</p> 
{{ user.get_provider }} 
<p>---------------------------</p> 

給了我這樣的:

user 

Another try... 
user 

--------------------------- 

--------------------------- 

--------------------------- 

我沒有看到在runserver控制檯的任何錯誤。

還有什麼我需要添加到settings.py? 我需要寫一些回調函數來將用戶名從電子郵件字段中提取出來嗎?

我使用Python 2.6.1(雪豹),如果這有什麼區別。

在此先感謝!

+0

您正在使用哪個版本的django-allauth?另外,自從12月12日你問這個問題以來,至少已經發布了12個版本的django-allauth,你所描述的問題可能已經得到解決...... – tutuDajuju

+1

你是否找到了解決方案? – Carlos

回答

0

如果你看看Django的allauth的OpenID的代碼,你可以看到,它不會提取用戶名,但只有電子郵件,名字,姓氏和名字:

https://github.com/pennersr/django-allauth/blob/master/allauth/socialaccount/providers/openid/provider.py#L65

至於在ACCOUNT_USERNAME_REQUIRED設置,您可以在文檔中看到它是在註冊表單中使用:

ACCOUNT_USERNAME_REQUIRED (=True) The user is required to enter a username when signing up. Note that the user will be asked to do so even if ACCOUNT_AUTHENTICATION_METHOD is set to email. Set to False when you do not wish to prompt the user to enter a username.

我希望這可以幫助你與你的疑慮。

相關問題