【第三方登录】Google邮箱

登录谷歌邮箱开发者

https://console.developers.google.com/

  • 先创建项目
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
我们用的web应用

  • 设置回调
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

核心主要:
1.创建应用  
2.创建客户端ID 
3.设置域名和重定向URL 
4.对外公开,这样所有的gmail邮箱 都能参与测试

PHP代码实现

  • 引入第三方包
    https://github.com/googleapis/google-api-php-client/releases
  • 获取第三方跳转链接接口
    public function googleUrl()
    {
        global $db,$request,$comId;
        //引入第三方包
        require_once 'inc/google_client/vendor/autoload.php';  
        
        $googleConfig = array(
            "client_id"=>"客户端ID",
    		"project_id"=>"hudong",//项目名称
    		"auth_uri"=>"https://accounts.google.com/o/oauth2/auth",
    		"token_uri"=>"https://oauth2.googleapis.com/token",
    		"auth_provider_x509_cert_url"=>"https://www.googleapis.com/oauth2/v1/certs",
    		"client_secret"=>"客户端秘钥",
    		"redirect_uris"=>["https://vip.com/Google"],//设置的回调结合 可以设置多个
    		"javascript_origins"=>["https://vip.com"]//设置的获取JavaScript的来源配置  
        );
        
    	$clientID = $googleConfig['client_id'];
    	$clientSecret = $googleConfig['client_secret'];
        $redirectUri = $googleConfig['callBack'] = "https://vip.com/Google"; //当前项目回调地址
 
    // create Client Request to access Google API
        $client = new \Google_Client();

        $client->setClientId($clientID);
        $client->setClientSecret($clientSecret);
        $client->setRedirectUri($redirectUri);
        $client->addScope("email");
        $client->addScope("profile");
        // authenticate code from Google OAuth Flow
       
        $loginUrl = $client->createAuthUrl();
           
        $return['code'] = 1;
   		$return['message'] = '获取成功';
   		$return['data'] = array();
   		$return['data']['url'] = $loginUrl;
   		
   		return json_encode($return,JSON_UNESCAPED_UNICODE); 
    }
  • 跳转之后 ,前端获取code 传给后台,读取邮箱相关信息
 public function googleLogin()
    {
        global $db,$request,$comId;
        
        require_once 'inc/google_client/vendor/autoload.php';  
        
        // echo ABSPATH.'inc/google_client/vendor/autoload.php';  die;
        // require '../lib/internal/google-api-php-client--PHP7.0/vendor/autoload.php';  
       
        // $googleConfig = $this->snsaccount->googleAccount();
        
        $googleConfig = array(
            "client_id"=>"客户端ID",
    		"project_id"=>"hudong",//项目名称
    		"auth_uri"=>"https://accounts.google.com/o/oauth2/auth",
    		"token_uri"=>"https://oauth2.googleapis.com/token",
    		"auth_provider_x509_cert_url"=>"https://www.googleapis.com/oauth2/v1/certs",
    		"client_secret"=>"客户端秘钥",
    		"redirect_uris"=>["https://vip.com/Google"],//设置的回调结合 可以设置多个
    		"javascript_origins"=>["https://vip.com"]//设置的获取JavaScript的来源配置  
        );
        
    	$clientID = $googleConfig['client_id'];
    	$clientSecret = $googleConfig['client_secret'];
        $redirectUri = $googleConfig['callBack'] = "https://tocmodels.com/Google";  //Google console redirect URI 
        
        $client = new \Google_Client();

        $client->setClientId($clientID);
        $client->setClientSecret($clientSecret);
        $client->setRedirectUri($redirectUri);
        $client->addScope("email");
        $client->addScope("profile");
        
        $code = $request['code'];
        if(empty($code)) return '{"code":0,"message":"code为必传参数"}';
        
        $token = $client->fetchAccessTokenWithAuthCode($request['code']);
        // var_dump($token);
        if(isset($token['error'])) return '{"code":0,"message":"'.$token['error'].'"}';
        $client->setAccessToken($token['access_token']);
        // get profile info
        $google_oauth = new \Google_Service_Oauth2($client);
        $google_account_info = $google_oauth->userinfo->get();
        
        $email = $google_account_info->email;//谷歌邮箱
        $gid =  $google_account_info->id;//谷歌id
        $gname = $google_account_info->name;//谷歌实名
        $image = $google_account_info->picture;//谷歌头像
        
      
    }
    
    private function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_URL, $url);
        $res = curl_exec($curl);
        curl_close($curl);
        return $res;
    }


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/488279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【云能耗管理系统在某大型商场的应用】安科瑞Acrel-EIOT能源物联网平台方案

摘要:依据对上海市某大型商场现场考察的结果,提出通过建设云能耗管理系统的方案来改善商场能耗的管理现状。首先充分搜集建筑信息和设备运行工况,合理设计系统实施方案,解决现场数据采集和传输障碍,完成云能耗管理系统…

常用设计模式介绍

前言 简说设计模式。 文章目录 前言一、设计模式的要素1、设计模式解决的问题2、设计模式分类1)创建型设计模式2)结构型设计模式3)行为型设计模式 二、详细介绍1、创建型设计模式1)工厂方法模式2)抽象工厂模式3&#x…

【JavaEE】进程是什么?

文章目录 ✍进程的概念✍进程存在的意义✍进程在计算机中的存在形式✍进程调度 ✍进程的概念 每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通…

上位机图像处理和嵌入式模块部署(qmacvisual拟合圆和拟合椭圆)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了拟合直线,今天继续学习下拟合圆和拟合椭圆。其实除了最后一步不同,两者的逻辑是差不多的。一般都是&#xf…

C语言例4-6:格式字符d的使用例子

代码如下&#xff1a; //格式字符d的使用例子 #include<stdio.h> int main(void) {int num1123;long num2123456;printf("num1%d,num1%5d,num1%-5d,num1%2d\n",num1,num1,num1,num1);//以四种不同格式&#xff0c;输出int型数据num1的值printf("num2%ld,…

Elasticsearch 索引模板、生命周期策略、节点角色

简介 索引模板可以帮助简化创建和二次配置索引的过程&#xff0c;让我们更高效地管理索引的配置和映射。 索引生命周期策略是一项有意义的功能。它通常用于管理索引和分片的热&#xff08;hot&#xff09;、温&#xff08;warm&#xff09;和冷&#xff08;cold&#xff09;数…

【研发管理】产品经理知识体系-战略

导读&#xff1a;了解和掌握产品经理知识体系-战略是产品经理必修课。战略在产品创新管理框架中核心位置。本文概要梳理战略相关知识内容&#xff0c;仅供大家参考。 目录 1、战略定义 1.1 战略金字塔 1.2 战略的层级总表 1.3 战略跟战术的关系 1.4 愿景、使命和价值观​编…

ExoPlayer架构详解与源码分析(12)——Cache

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

yolov8直接调用zed相机实现三维测距(python)

yolov8直接调用zed相机实现三维测距&#xff08;python&#xff09; 1. 相关配置2. 相关代码3. 实验结果 相关链接 此项目直接调用zed相机实现三维测距&#xff0c;无需标定&#xff0c;相关内容如下&#xff1a; 1.yolov5直接调用zed相机实现三维测距&#xff08;python&#…

2024年哈尔滨工业大学材料科学与工程学院硕士研究生招生复试名单

2024年哈尔滨工业大学材料科学与工程学院硕士研究生招生复试名单 材料科学与工程学院2024年硕士研究生招生考试复试及录取工作方案 &#xff08;含深圳、威海校区&#xff0c;不含航天学院复合材料方向&#xff09; 复试录取名单数据分析: {51412, 50222, 50242, 61121, 50251…

蓝桥杯单片机快速开发笔记——利用定时器计数器设置定时器

一、基本原理 参考本栏http://t.csdnimg.cn/iPHN0 二、具体步骤 三、主要事项 如果使用中断功能记得打开总中断EA 四、示例代码 void Timer0_Isr(void) interrupt 1 { }void Timer0_Init(void) //10毫秒12.000MHz {AUXR & 0x7F; //定时器时钟12T模式TMOD & 0xF0;…

创建linux虚拟机系统:(安装Ubuntu镜像文件,包含语言设置、中文输入法、时间设置)

我下载的是清华大写开源软件镜像站中的ubuntu-20.04.6-desktop-amd64.iso这个镜像文件&#xff0c; 这个文件我下载完成之后没有解压&#xff0c;直接在创建虚拟机的时候选择的压缩包。 地址为&#xff1a;Index of /ubuntu-releases/20.04/ | 清华大学开源软件镜像站 | Tsin…

FastAPI+React全栈开发05 React前端框架概述

Chapter01 Web Development and the FARM Stack 05 The frontend React FastAPIReact全栈开发05 React前端框架概述 Let’s start with a bit of context here. Perhaps the changes in the world of the web are most visible when we talk about the frontend, the part o…

政安晨:【Keras机器学习实践要点】(三)—— 编写组件与训练数据

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 介绍 通过 Keras&#xff0c;您可以编写自定…

【解析几何】 【多源路径】 【贪心】1520 最多的不重叠子字符串

作者推荐 视频算法专题 本身涉及知识点 解析几何 图论 多源路径 贪心 LeetCode1520. 最多的不重叠子字符串 给你一个只包含小写字母的字符串 s &#xff0c;你需要找到 s 中最多数目的非空子字符串&#xff0c;满足如下条件&#xff1a; 这些字符串之间互不重叠&#xff0…

LeetCode 面试经典150题 392.判断子序列

题目&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"…

量子计算新“尺度”:用经典计算机评估复杂量子系统!

未来的量子计算机有望在计算机科学、医疗、商业、化学、物理学等多个领域解决难题&#xff0c;从而超越传统计算机。然而&#xff0c;目前的量子计算机仍存在局限&#xff0c;主要是由于它们固有的错误率。为此&#xff0c;研究者正致力于降低这些错误率。 一种研究量子计算机误…

Linux 性能优化

性能优化 性能指标 高并发和响应快对应着性能优化的两个核心指标&#xff1a;吞吐和延时 应用负载角度&#xff1a;直接影响了产品终端的用户体验 系统资源角度&#xff1a;资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈&#xff0c;但请求的处理还不够快…

Gemma开源AI指南

近几个月来&#xff0c;谷歌推出了 Gemini 模型&#xff0c;在人工智能领域掀起了波澜。 现在&#xff0c;谷歌推出了 Gemma&#xff0c;再次引领创新潮流&#xff0c;这是向开源人工智能世界的一次变革性飞跃。 与前代产品不同&#xff0c;Gemma 是一款轻量级、小型模型&…

Linux 搭建jenkins docker

jekin docker gitee docker 安装 jenkins docker run -d --restartalways \ --name jenkins -uroot -p 10340:8080 \ -p 10341:50000 \ -v /home/docker/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker je…