IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> gitee三方登录 -> 正文阅读

[网络协议]gitee三方登录

gitee三方登录

步骤

1、先在gitee设置的第三方应用上创建应用,编写回调地址,和网址主页,生成Client ID 和 Client Secret

2、在点击用户授权之后,会在回调地址栏上出现一个code获取到code,请求 https://gitee.com/oauth/token 地址,post请求, ‘https://gitee.com/oauth/token?grant_type=authorization_code&’ . $code . ‘&client_id=’ . $client_id . ‘&redirect_uri=’ . $redirect_uri . ‘&client_secret=’ . $client_secret; 拼接url请求可以获得一个token。

在这里插入图片描述

3、通过token请求https://gitee.com/api/v5/user地址,get请求,https://gitee.com/api/v5/user?access_token=’ . t o k e n , 获 得 用 户 的 基 本 信 息 token,获得用户的基本信息 tokenuserinfo.

4、创建一个三方关联表,将用户信息和三方关联的信息存在表中,用来判断该三方账号是否已经绑定用户账号,没有则新增一个用户,返回用户信息,有的话就返回用户信息。

CREATE TABLE `trilateral_login` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `type` int DEFAULT NULL COMMENT '三方服务 1:gitee',
  `user_id` int DEFAULT NULL COMMENT '用户的id',
  `auth_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '验证的三方登录的唯一标识',
  `init_time` int DEFAULT NULL,
  `last_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='三方关联表';
配置文件config.php新增的配置
$config['gitee_get_token'] = 'https://gitee.com/oauth/token';
$config['gitee_get_info'] = 'https://gitee.com/api/v5/user';
$config['gitee_client_id'] = '70fe5fdf4ed079a2998a*********1e0af6a61bb80ae92b691e025eef2607***';
$config['gitee_client_secret'] = '7c02b14f9ea47f67*********fbd3f2b0a914b89f1f42ab76febdc12cf******';
$config['gitee_redirect_uri'] = 'http://ci.com/gitCallback';
controller代码
<?php
/**
 * Created by PhpStorm.
 * User: wyq
 * Date: 2021/10/15
 * Time: 11:20
 */

class Callback extends Base_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('Users_model');
    }
    //回调地址
    public function gitCallback()
    {
        //获取当前用户返回的code
        if (empty($_SERVER['QUERY_STRING'])) {
            fail(400, '参数错误');
        }
        //获取到返回的code
        $code = $_SERVER['QUERY_STRING'];
        //配置文件获取配置信息
        $get_token_url = config_item('gitee_get_token');//获取token的url
        $client_id = config_item('gitee_client_id');//获取client_id
        $redirect_uri = config_item('gitee_redirect_uri');//获取回调地址
        $client_secret = config_item('gitee_client_secret');//获取client_secret
        $get_info_url = config_item('gitee_get_info');//通过token获取用户信息的url
        //发送curl获取当前用户的token
        $url1 = $get_token_url . '?grant_type=authorization_code&' . $code . '&client_id=' . $client_id . '&redirect_uri=' . $redirect_uri . '&client_secret=' . $client_secret;
        $res = curl_request($url1);
        $res = json_decode($res, true);
        $token = $res['access_token'];
        //通过token获取用户基本信息
        $url2 = $get_info_url . '?access_token=' . $token;
        $info = curl_request($url2, false);
        $info = json_decode($info, true);
        //通过gitee的id判断该用户gitee账号是否已经注册
        $count = $this->Users_model->checkTrilateralLogin(1, $info['id']);
        $count = $count[0]['num'];
        //使用过gitee三方账号登录
        if (!empty($info['id'])){
            if ($count > 0) {
                $userInfo = $this->Users_model->TrilateralLogin($info['id']);
                //通过用户id生成Jwt token发送给客户端
                $userInfo[0]['token'] = $this->Jwt_service->getToken($userInfo['id']);
                success($userInfo);
            } else {
                $userInfo = $this->Users_model->TrilateralRegister($info['name'], encrypt(123), 1, $info['id']);
                //通过用户id生成Jwt token发送给客户端
                $userInfo[0]['token'] = $this->Jwt_service->getToken($userInfo['id']);
                success($userInfo);
            }
        }
        fail(400,'信息有误');
    }
}
model代码
 	
	//判断三方登录表中是否有该id用户,即是否该三方账号已经绑定用户
    public function checkTrilateralLogin($type, $id)
    {
        return $this->commonQuery('count(id) num', ['type' => $type, 'auth_id' => $id], 'trilateral_login');
    }

    //使用三方返回的用户信息注册用户,返回用户信息
    public function TrilateralRegister($nickname, $password, $type, $auth_id)
    {
        $this->db->insert('users', ['nickname' => $nickname, 'password' => $password, 'username' => $nickname, 'create_time' => time()]);
        $user_id = $this->db->insert_id('users');
        $this->commonInsert('trilateral_login', ['type' => $type, 'user_id' => $user_id, 'auth_id' => $auth_id, 'init_time' => time()]);
        return $this->commonQuery('*', ['id' => $user_id], 'users');
    }

	//在三方绑定表中,通过用户id获取用户信息
    public function TrilateralLogin($auth_id)
    {
        $user_id = $this->commonQuery('user_id', ['auth_id' => $auth_id], 'trilateral_login');
        $user_id = $user_id[0]['user_id'];
        return $this->commonQuery('*', ['id' => $user_id], 'users');
    }
{"code":200,"msg":"success","data":[{
    "id":"51",                              
    "username":"wyqgg",
    "password":"408d2b2b5cc43be7a34822c28a2ec3a7",
    "phone":null,
    "nickname":"wyqgg",
    "follow":"0",
    "fans":"0",
    "coin":null,
    "score":"0",
    "sign":null,
    "email":null,
    "aire":null,
    "true_name":null,
    "image":null,
    "sex":"1",
    "brith_time":null,
    "create_time":"1637586682",
    "update_time":null, 								                        "token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjNmMmc1N2E5MmFhIn0.eyJpc3MiOiJodHRwOlwvXC9jaS5jb20iLCJhdWQiOiJodHRwOlwvXC93d3cucHlnLmNvbSIsImp0aSI6IjNmMmc1N2E5MmFhIiwiaWF0IjoxNjM3NjM1NTM4LCJuYmYiOjE2Mzc2MzU1MzcsImV4cCI6MTYzNzcyMTkzOCwidXNlcl9pZCI6bnVsbH0.ufR3FPosgWnB6PfWrFZYSqShoeO7yJHWx2uvaeEg5DE"
}]}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:19:34  更:2021-11-24 08:21:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 21:08:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码