今日头条新浪第三方登入使用的是OAuth2.0,开拓前提已经登记开荒者帐号,是开垦者。

凯旋门074网址,OAuth简介

澳门凯旋门游戏网址,OAuth:
OAuth(开放授权)是贰个开花规范,允许用户授权第三方网址访问他们存款和储蓄在此外的劳务提供者上的音讯,而不必要将用户名和密码提须要第三方网址或分享他们数据的有所故事情节。

切实开支步骤

率先步:希图阶段

展开搜狐澳门凯旋门注册网址,开辟平台,并报到你的今日头条搜狐账号。再点击导航上的“微链接”–>
“网站接入”。
凯旋门074网址 1
凯旋门074网址 2
凯旋门074网址 3
制造完应用后再基本新闻里就足以获得App Key和App
Secret。在开荒阶段能够平素拿来接纳,如若网址上线须求完善阶段音讯。
凯旋门074网址 4
凯旋门074网址 5
乐乎第三方登录的大约步骤:先跳转到用户登陆分界面,同意后回调到填写的回调页面,获得code码,通过code码获取access_token,在那之中包括用户的唯一象征uid。

首先步:具体支出

凯旋门074网址 6

  • OAuth(开放授权)是一个开放标准。创建web应用
    创设完结现在,张开models.py文件,编写模型:

class Users(models.Model):
    uid = models.CharField(max_length=64, null=True)  # 微博的关联uid
    nickname = models.CharField(max_length=30, null=True)  # 用户昵称
    head = models.CharField(max_length=100, null=True)  # 用户头像
    sex = models.CharField(max_length=2, null=True)  # 性别
    register_time = models.DateTimeField('保存日期')  # 注册时间
    register_ip = models.CharField(max_length=30, null=True)  # 注册ip
    last_time = models.DateTimeField('最后修改日期')  # 最后一次登录时间

模型用于存款和储蓄和讯登录重返的uid值。这些uid是与腾讯网一一对应。
OAuth(开放授权)是一个开放标准。OAuth(开放授权)是一个开放标准。在总的urls路由中,参预相应应用路由。

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('login/', include('login.urls')),  # 登录模块
]

OAuth(开放授权)是一个开放标准。开辟对应应用目录下urls.py文件,填写对用的路由:

from django.urls import path
from . import views

urlpatterns = [
    path('oauth/weibo/login', views.weibo_login),  # 微博授权页面
    path('weibo/connect/callback.php', views.weibo_get_code),  # 微博回调页面
]

oauth/weibo/login和weibo/connect/callback.php,分别是开发授权页面和回调地址。
大概步骤是授权之后,获得uid。剖断那么些uid是或不是存在数据库中。若存在,则一向登入对应的用户就能够;若不设有,则得到调取获取用户消息的腾讯网接口,获取用户音信。

  • 开辟登陆模块
    1.在工程目录settings.py中设置常量

'''微博登录常量'''
WEIBO_APP_ID = "App Key"
WEIBO_APP_KEY = "App Secret"
WEIBO_REDIRECT_URI = "回调地址"

2.在对应应用的公文夹下成立wb_oauth.py文件,编辑wb_oauth.py文件:

import requests
import json


class OAuthWB:
    def __init__(self, client_id, client_key, redirect_uri):
        self.client_id = client_id
        self.client_key = client_key
        self.redirect_uri = redirect_uri

    def get_access_token(self, code):  # 获取用户token和uid
        url = "https://api.weibo.com/oauth2/access_token"

        querystring = {
            "client_id": self.client_id,
            "client_secret": self.client_key,
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": self.redirect_uri
        }

        response = requests.request("POST", url, params=querystring)

        return json.loads(response.text)

    def get_user_info(self, access_token_data):
        url = "https://api.weibo.com/2/users/show.json"

        querystring = {
            "uid": access_token_data['uid'],
            "access_token": access_token_data['access_token']
        }

        response = requests.request("GET", url, params=querystring)

        return json.loads(response.text)

3.编纂对应应用的文件夹下views.py文件:

from .wb_oauth import OAuthWB
from django.conf import settings  # 引入常量
def weibo_login(request):# 跳转授权页面
    return HttpResponseRedirect(
        'https://api.weibo.com/oauth2/authorize?client_id=' + settings.WEIBO_APP_ID + '&redirect_uri=' + settings.WEIBO_REDIRECT_URI)


def weibo_get_code(request):
    """登录之后,会跳转到这里。需要判断code和state"""
    code = request.GET.get('code', None)
    sina = OAuthWB(settings.WEIBO_APP_ID,
                   settings.WEIBO_APP_KEY,
                   settings.WEIBO_REDIRECT_URI)
    user_info = sina.get_access_token(code)
    time.sleep(0.1)  # 防止还没请求到token就进行下一步
    # 通过uid查询出是否是新用户,新用户则注册登录
    is_user_exist = models.Users.objects.filter(uid=user_info['uid']).first()
    if is_user_exist is not None:
        # 存在直接登录
        pass
    else:
        #不存在获取用户信息
        new_user_info = sina.get_user_info(user_info)
        users_dict = {
            "uid": new_user_info['id'],
            'description': new_user_info['description'],
            "head": new_user_info['profile_image_url'],
            "nickname": new_user_info['name'],
        }
        users_table_obj = models.Users.objects.create(**users_dict).id   

注:获取邮箱地址的接口是属于高等权限,必要先经过查处,然后在自己的使用中的接口管理中申请。和讯提供的API测验页面。

相关文章