python flask实现三方微博登录

python flask实现三方微博登录,第1张

python flask实现三方微博登录

1.配置main.py

from flask import Flask

# 初始化flask
def create_app():
    app = Flask(__name__)
    with app.app_context():
        pass
    return app
app = create_app()

# 注册微博蓝图
from views.weibo import bp_users
app.register_blueprint(bp_users,url_prefix='/users/')

#解决跨域
from flask_cors import CORS
CORS(app)
# 解决中文乱码
app.config['JSON_AS_ASCII']=False

# 导入微博配置
app.config['SECRET_KEY'] = '123123wadaws'
# 下面是SMTP服务器配置
app.config['MAIL_SERVER'] = 'smtp.163.com'  # 电子邮件服务器的主机名或IP地址
app.config['MAIL_PORT'] = '25'  # 电子邮件服务器的端口
app.config['MAIL_USE_TLS'] = True  # 启用传输层安全
app.config['MAIL_USERNAME'] = '[email protected]'  # os.environ.get('MAIL_USERNAME') #邮件账户用户名
app.config['MAIL_PASSWORD'] = 'XXOWYMNBUMGHEBOV'  # os.environ.get('MAIL_PASSWORD') #邮件账户的密码

# 运行接口
if __name__ == "__main__":
    app.run(debug=True,host='127.0.0.1',port=8000)

在文件夹下创建view 在view下创建weibo.py文件夹

weibo.py代码如下:

from flask import  Flask,request,Blueprint,jsonify,redirect  # flask 中跳转
import requests
import re
import json
from db import db1
from utils.jwt_c import jwte
# 加密

# 声明蓝图
bp_users = Blueprint('users',__name__)

from db import db1


@bp_users.route('/weiboCallback/',methods=['POST','GET'])
def weiboCallback():
    # 获取code
    code = request.args.get("code")
    # print(code)
    # 微博认证地址
    access_token_url = "https://api.weibo.com/oauth2/access_token"
    # 参数
    response = requests.post(access_token_url, data={
        "client_id": '3648830690',
        "client_secret": "916d80b477ccffce5d70e63b02bb1092",
        "grant_type": "authorization_code",
        "code": code,
        "redirect_uri": "http://127.0.0.1:8000/users/weiboCallback/",
    })
    res = eval(str(response.text))

    try:
        uid = res['uid']
        token = res['access_token']
    except Exception as e:
        uid = 0
        return redirect('http://localhost:8888/error/')

    # 通过uid去三方登录表查询数据量 
    sql = "select u.nikename,u.id,u.email from sf_login as sf inner join users as u on sf.user_id=u.id where sf.uid=%d"%(int(uid))
    res = db1.find(sql)


    if res:
        # 找到生成token返回
        token1 = jwte.j_encode({"data":{'id':res['id'],'email':res['email']}})
        return redirect('http://localhost:8888/bandMobile/?type=1&id='+str(res['id'])+'&email='+res['email']+'&token='+token1)
        # return redirect("http://localhost:8888/?id="+res['id']+'&nikename='+res['nikename']+'&email='+res['email'])
    else:
        # 不存在绑定用户 *** 作 redirect 跳转到vue页面,将uid token 携带 来自那微博还是微信还是qq
        return redirect('http://localhost:8888/bandMobile/?type=2&uid=' + uid + '&token=' + token)





@bp_users.route('/bainMobile/',methods=['POST'])
def bainMobile():
    # 在vue页面上显示一个输入框 绑定手机号
    data = request.data
    if data:
        data = json.loads(data)
    else:
        data = request.form
    print(data)
        # 先用mobile去用户表生成信息
    sql = "select id from users where email='%s'"%(data['email'])
    email  = db1.find(sql)

    if email:
        return jsonify({"code":403,'msg':'邮箱存在,不可绑定'})
    else:

        # 三方登录添加信息
        try:
            # sql = "insert into users(email) values ('%s')"%(data['email'])
            sql = "insert into users(email) values ('%s')" %(data['email'])
            db1.update(sql)
        except :
            return jsonify({"code":10050,'msg':'用户添加失败'})


        # 查询id
        sql1 = "select id,email from users where email = '%s'"%(data['email'])
        user = db1.find(sql1)
        # 三方登录表
        try:
            sql2 = "insert into sf_login(user_id,platfrom,uid,token) values(%d,'weibo','%s','%s')"%(int(user['id']),data['uid'],data['token'])
            db1.update(sql2)

            sql3 = "update users set status=1 where email='%s'" %(data['email'])
            db1.update(sql3)
            token1 = jwte.j_encode({"data": {'id': user['id'], 'email': user['email'],}})
            return jsonify({'code':200,'id':user['id'],'email':user['email'],'token':token1})
        except :
            return jsonify({'code':403,'msg':'添加三方失败'})

























前端

//跳转地址

// 点击获取后端的url 并且传入前端赋值weibo_url



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5701495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存