1.微博回调接口
1.1 oauth/urls.py中添加路由
urlpatterns = [
path('weibo/callback/', views.OauthWeiboCallback.as_view()),
]
1.2 oauth/views.py中添加试图函数
http://192.168.56.100:8888/oauth/weibo/callback/
from .models import OauthUser
from rest_framework_jwt.serializers import jwt_payload_handler, jwt_encode_handler
from user.utils import jwt_response_payload_handler
OauthWeiboCallback(APIView):
permission_classes = (AllowAny,)
def post(self, request):
code = request.data.get('code')
data = {
'client_id': '3516473472',
'client_secret': '7862ee35a0dc6f0345d0464dc34f14fc',
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': 'http://127.0.0.1:8888/oauth/callback/',
}
url = 'https://api.weibo.com/oauth2/access_token'
data = requests.post(url=url, data=data).json()
access_token = data.get('uid')
weibo_uid = data.get('access_token')
try:
oauth_user = OauthUser.objects.get(uid=weibo_uid, oauth_type='1')
except Exception as e:
oauth_user = None
if oauth_user:
user = oauth_user.user
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
data = jwt_response_payload_handler(token, user)
data['type'] = '0'
return Response({'code': 0, 'msg': '登录成功', 'data': data})
else:
return Response({'code': 0, 'msg': '授权成功', 'data': {'type': '1', 'uid': weibo_uid}})
1.3 oauth/models.py中添加用户绑定模型
class OauthUser(models.Model):
OAUTHTYPE = (
('1', 'weibo'),
('2', 'weixin'),
)
uid = models.CharField('三方用户id', max_length=64)
user = models.ForeignKey('user.User', on_delete=models.CASCADE)
oauth_type = models.CharField('认证类型', max_length=10, choices=OAUTHTYPE)
1.4 迁移数据库
python manager.py makemigrations
python manager.py migrate