Google 및 stackoverflow에서이 주제에 대한 다른 질문을 보았지만 올바른 해결책을 찾지 못하는 것 같습니다. 나는 정사각형을 사용하여 응용 프로그램의 사용자를 인증하려고합니다. 사용자가 foursquare로 로그인하면 데이터베이스에 사용자로 생성 한 다음 해당 정보 중 일부를 저장하려고합니다. 이 모든 것이 잘 작동합니다. 동시에 인증 된 사용자로 로그인하려고합니다. 이것은 내가 약간의 문제가있는 곳이다. 내보기는 다음과 같습니다Django + Foursquare OAuth + 사용자 로그인
def foursq_done(request):
# get the access_token
access_token = request.session.get('access_token')
print access_token
# request user details from foursquare
params = {'oauth_token': access_token}
data = urllib.urlencode(params)
url = 'https://api.foursquare.com/v2/users/self'
full_url = url + '?' + data
print full_url
response = urllib2.urlopen(full_url)
response = response.read()
user_data = json.loads(response)['response']['user']
name = user_data['firstName']
try:
user = User.objects.get(username=user_data['contact']['email'])
except User.DoesNotExist:
# Save information on user
user = User.objects.create_user(username=user_data['contact']['email'],
first_name=user_data['firstName'], last_name=user_data['lastName'],
email=user_data['contact']['email'], password=access_token)
profile = Profile()
profile.user = user
profile.oauth_token = access_token
profile.save()
user = authenticate(username=user_data['contact']['email'], password=access_token)
login(request, user)
# show the page with the user's name to show they've logged in
return TemplateResponse(request, 'foursq_auth/foursq_welcome.html', {'name': name}
이이보기처럼, 전에 장고 사용자를 만들 때 사용한 동일한 로그인 프로세스입니다
def user_signup(request):
if request.method == 'POST':
form = forms.UserSignupForm(data=request.POST)
if form.is_valid():
user = form.save()
g = Group.objects.get(name='test_group')
g.user_set.add(user)
# log user in
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(username=username, password=password)
login(request, user)
messages.success(request, u'Welcome to Social FollowUp')
return redirect('user_create')
else:
form = forms.UserSignupForm()
return TemplateResponse(request, 'user_signup.html', {
'form': form,
})
나는 나의 정사각형 로그인과 같은 결과를 원하는 프로세스 - 사용자는 인증되고 장고 사용자로 로그인/인식됩니다.
Internal Server Error: /tattoo/foursquare/done/
Traceback (most recent call last):
File "/Users/triplec1988/projects/tattoo/venv/lib/python2.7/site- packages/django/core/handlers/base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/Users/triplec1988/projects/tattoo/tatt2me/web_tatt2me/views.py", line 106, in foursq_done
login(request, user)
File "/Users/triplec1988/projects/tattoo/venv/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 92, in login
request.session[BACKEND_SESSION_KEY] = user.backend
File "/Users/triplec1988/projects/tattoo/venv/lib/python2.7/site-packages/django/utils/functional.py", line 203, in inner
return func(self._wrapped, *args)
AttributeError: 'AnonymousUser' object has no attribute 'backend'
나는 포 스퀘어 사용자가 AnonymousUser되고 싶지 않아,하지만 난 인증()를 실행할 때 분명히 뭔가가 작동하지 않는 대신이 오류를보고하십시오. 내가 도대체 뭘 잘못하고있는 겁니까?
에서
은 EMAILADDRESS 이상 30 자인가? 아마도 그게 문제입니다. 왜냐하면 [username은 그보다 더 길 수 없습니다.] (https://docs.djangoproject.com/en/1.5/ref/contrib/auth/#django.contrib.auth.models.User). –
여기서는 그렇지 않습니다. 다른 질문과 같은 점을 보았습니다. 이메일 필드의 기본 길이는 어쨌든 75 자라고 생각합니다. –
아마도 emailfield에 대해,하지만 당신은 사용자 이름 필드에 대해서도 emailaddress를 사용합니다. –