사용자가 Facebook을 통해 가입 할 수있는 모바일 앱이 있습니다. FB에서 액세스 토큰을 받으면 장고 백엔드로 보냅니다.api를 통해 액세스 토큰이 주어지면 새 사용자 및 새 django allauth 소셜 계정을 만드는 방법은 무엇입니까?
하지만 그 다음은 무엇입니까?
django-allauth 내부에 액세스 토큰을 공급하여 새로운 사용자/사회 계정을 만들 수있는 방법이 있습니까?
아니면 수동으로해야합니까?
사용자가 Facebook을 통해 가입 할 수있는 모바일 앱이 있습니다. FB에서 액세스 토큰을 받으면 장고 백엔드로 보냅니다.api를 통해 액세스 토큰이 주어지면 새 사용자 및 새 django allauth 소셜 계정을 만드는 방법은 무엇입니까?
하지만 그 다음은 무엇입니까?
django-allauth 내부에 액세스 토큰을 공급하여 새로운 사용자/사회 계정을 만들 수있는 방법이 있습니까?
아니면 수동으로해야합니까?
나는 항상 질문을 게시 한 직후 대답을 알아내는 것처럼 보입니다. 어쨌든 다음은 UserResource (ApiKeyAuthentication을 사용하는 tastypie API)에 대한 사용자 지정 메서드입니다. 대부분은 allauth.socialaccount.providers.facebook.views의 login_by_token 메소드에서 가져 왔습니다.
더 나은 답변을 게시하는 경우 잠시 동안 내 대답을 올바르게 선택하지 않겠습니다.
def facebook_login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json'))
access_token = data.get('access_token', '')
from allauth.socialaccount import providers
from allauth.socialaccount.models import SocialLogin, SocialToken, SocialApp
from allauth.socialaccount.providers.facebook.views import fb_complete_login
from allauth.socialaccount.helpers import complete_social_login
try:
app = SocialApp.objects.get(provider="facebook")
token = SocialToken(app=app,
token=access_token)
login = fb_complete_login(app, token)
login.token = token
login.state = SocialLogin.state_from_request(request)
ret = complete_social_login(request, login)
#if we get here we've succeeded
return self.create_response(request, {
'success': True,
'username': request.user.username,
'user_id': request.user.pk,
'api_key': request.user.api_key.key,
})
except:
# FIXME: Catch only what is needed
return self.create_response(request, {
'success': False,
'reason': "Bad Access Token",
}, HttpForbidden)
작업 소스 코드 : 수준은 UserResource에서 (ModelResource) : 다음
def override_urls(self):
return [
url(r"^(?P<resource_name>%s)/facebook_login%s$" %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('facebook_login'), name="api_facebook_login"),
]
def facebook_login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
data = self.deserialize(
request,
request.raw_post_data,
format=request.META.get('CONTENT_TYPE', 'applicaton/json'))
access_token = data.get('access_token', '')
print(access_token)
from allauth.socialaccount import providers
from allauth.socialaccount.models import SocialLogin, SocialToken, SocialApp
from allauth.socialaccount.providers.facebook.views import fb_complete_login
from allauth.socialaccount.helpers import complete_social_login
try:
app = SocialApp.objects.get(provider="facebook")
print(app)
token = SocialToken(app=app,
token=access_token)
login = fb_complete_login(app, token)
login.token = token
login.state = SocialLogin.state_from_request(request)
ret = complete_social_login(request, login)
#if we get here we've succeeded
return self.create_response(request, {
'success': True,
'username': request.user.username,
'user_id': request.user.pk,
'api_key': request.user.api_key.key,
})
except:
# FIXME: Catch only what is needed
return self.create_response(request, {
'success': False,
'reason': "Bad Access Token",
}, HttpForbidden)
:
---dump 헤더 곱슬 곱슬 - "콘텐츠 형식을 -H : 응용 프로그램/json "-X POST - 데이터 '{"access_token ":"xxxxxxxx "}'http://xx.xxxxxx.com:8000/api/v1/user/facebook_login/
테스트 OK, 사용자 만들기 OK.
감사합니다.
현대 독자 (2017)는 allauth을 기반으로하지만, 마음에 단일 페이지 응용 프로그램에 내장되어 장고 - 휴식 - 인증,보고 할 수 있습니다 :
http://django-rest-auth.readthedocs.io/en/latest/introduction.html
나는 allauth 코드를 통해 수수께끼 시간을 보냈다 , 그리고 결국이 비슷한 꽤 뭔가를 생각해 냈지만 ... 단지 지금이 발견. 감사! – Kobold
이 코드를 어떻게 호출합니까? – diofeher
새 버전으로 이제'fb_complete_login (요청, 응용 프로그램, 토큰) ' – psychok7