我最近创建了一个自定义用户,如下所示并安装了它:
蒸汽用户
class User(AbstractBaseUser):
steamid = models.IntegerField(max_length=20, primary_key=True)
username = models.CharField(max_length=80)
email = models.EmailField(null=True,blank=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_mod = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
reputation = models.IntegerField(max_length=6, default=0)
USERNAME_FIELD = 'steamid'
objects = UserManager()
def __unicode__(self):
return self.username
def get_full_name(self):
return self.steamid
def get_short_name(self):
return self.username
我还创建了 UserManager 函数 create_user 和 create_superuser。
我已将用户模型设置为 django 和 python-social 的自定义模型
设置
AUTH_USER_MODEL = 'steamuser.User'
SOCIAL_AUTH_USER_MODEL = 'steamuser.User'
在 Steam 的社交后端文件中,我已将其更改为仅包含两个详细信息(目前)
蒸汽.py
details = {'steamid': player.get('steamid'),
'username': player.get('personaname'),
当我尝试登录并重定向回登录页面(主页)时,我收到以下错误
/complete/steam/ int() 以 10 为基数的无效文字处的 ValueError:'evolve'
我正在查看回溯,但我不确定错误可能源自何处,因为它显然与我的用户模型和 python 社交存在一些问题。
编辑
这是完整/蒸汽的视图(来自 python-social 应用程序)
from django.contrib.auth import login, REDIRECT_FIELD_NAME
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.views.decorators.http import require_POST
from social.actions import do_auth, do_complete, do_disconnect
from social.apps.django_app.utils import strategy
@strategy('social:complete')
def auth(request, backend):
return do_auth(request.social_strategy, redirect_name=REDIRECT_FIELD_NAME)
@csrf_exempt
@strategy('social:complete')
def complete(request, backend, *args, **kwargs):
"""Authentication complete view, override this view if transaction
management doesn't suit your needs."""
return do_complete(request.social_strategy, _do_login, request.user,
redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
这是来自社交活动的函数 do_complete
def do_complete(strategy, login, user=None, redirect_name='next',
*args, **kwargs):
# pop redirect value before the session is trashed on login()
data = strategy.request_data()
redirect_value = strategy.session_get(redirect_name, '') or \
data.get(redirect_name, '')
is_authenticated = user_is_authenticated(user)
user = is_authenticated and user or None
partial = partial_pipeline_data(strategy, user, *args, **kwargs)
if partial:
xargs, xkwargs = partial
user = strategy.continue_pipeline(*xargs, **xkwargs)
else:
user = strategy.complete(user=user, request=strategy.request,
*args, **kwargs)
if user and not isinstance(user, strategy.storage.user.user_model()):
return user
if is_authenticated:
if not user:
url = setting_url(strategy, redirect_value, 'LOGIN_REDIRECT_URL')
else:
url = setting_url(strategy, redirect_value,
'NEW_ASSOCIATION_REDIRECT_URL',
'LOGIN_REDIRECT_URL')
elif user:
if user_is_active(user):
# catch is_new/social_user in case login() resets the instance
is_new = getattr(user, 'is_new', False)
social_user = user.social_user
login(strategy, user, social_user)
# store last login backend name in session
strategy.session_set('social_auth_last_login_backend',
social_user.provider)
if is_new:
url = setting_url(strategy,
'NEW_USER_REDIRECT_URL',
redirect_value,
'LOGIN_REDIRECT_URL')
else:
url = setting_url(strategy, redirect_value,
'LOGIN_REDIRECT_URL')
else:
url = setting_url(strategy, 'INACTIVE_USER_URL', 'LOGIN_ERROR_URL',
'LOGIN_URL')
else:
url = setting_url(strategy, 'LOGIN_ERROR_URL', 'LOGIN_URL')
if redirect_value and redirect_value != url:
redirect_value = quote(redirect_value)
url += ('?' in url and '&' or '?') + \
'{0}={1}'.format(redirect_name, redirect_value)
if strategy.setting('SANITIZE_REDIRECTS', True):
url = sanitize_redirect(strategy.request_host(), url) or \
strategy.setting('LOGIN_REDIRECT_URL')
return strategy.redirect(url)
这是回溯
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/complete/steam/?janrain_nonce=2014-08-11T01%3A11%3A40Zk6fuhG&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fsteamcommunity.com%2Fopenid%2Flogin&openid.claimed_id=http%3A%2F%2Fsteamcommunity.com%2Fopenid%2Fid%2F76561197977746283&openid.identity=http%3A%2F%2Fsteamcommunity.com%2Fopenid%2Fid%2F76561197977746283&openid.return_to=http%3A%2F%2F127.0.0.1%3A8000%2Fcomplete%2Fsteam%2F%3Fjanrain_nonce%3D2014-08-11T01%253A11%253A40Zk6fuhG&openid.response_nonce=2014-08-11T01%3A11%3A42ZXa1zGqR0YX6vKkOzBDlc70yZJj8%3D&openid.assoc_handle=1234567890&openid.signed=signed%2Cop_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle&openid.sig=%2FhtMIPXfOG16fnfimXZ0Vsb5NNU%3D
Django Version: 1.6.5
Python Version: 2.7.3
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'steamuser',
'social.apps.django_app.default',
'south',
'dota2items')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\core\handlers\base.py" in get_response
112. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
57. return view_func(*args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\apps\django_app\utils.py" in wrapper
45. return func(request, backend, *args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\apps\django_app\views.py" in complete
21. redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\actions.py" in do_complete
44. *args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\strategies\base.py" in complete
71. return self.backend.auth_complete(*args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\backends\open_id.py" in auth_complete
165. return self.strategy.authenticate(*args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\strategies\django_strategy.py" in authenticate
71. return authenticate(*args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\contrib\auth\__init__.py" in authenticate
49. user = backend.authenticate(**credentials)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\backends\base.py" in authenticate
69. return self.pipeline(pipeline, *args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\backends\base.py" in pipeline
72. out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\backends\base.py" in run_pipeline
98. result = func(*args, **out) or {}
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\pipeline\user.py" in get_username
48. while storage.user.user_exists(username=final_username):
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\social\storage\django_orm.py" in user_exists
49. return cls.user_model().objects.filter(*args, **kwargs).count() > 0
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\manager.py" in filter
163. return self.get_queryset().filter(*args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\query.py" in filter
593. return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
611. clone.query.add_q(Q(*args, **kwargs))
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\sql\query.py" in add_q
1204. clause = self._add_q(where_part, used_aliases)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\sql\query.py" in _add_q
1240. current_negated=current_negated)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\sql\query.py" in build_filter
1131. clause.add(constraint, AND)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\utils\tree.py" in add
104. data = self._prepare_data(data)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\sql\where.py" in _prepare_data
79. value = obj.prepare(lookup_type, value)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\sql\where.py" in prepare
352. return self.field.get_prep_lookup(lookup_type, value)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_lookup
1085. return super(IntegerField, self).get_prep_lookup(lookup_type, value)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_lookup
369. return self.get_prep_value(value)
File "C:\Users\Deep.C\.virtualenvs\steamtest\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
1079. return int(value)
Exception Type: ValueError at /complete/steam/
Exception Value: invalid literal for int() with base 10: 'evolve'