注意:首先要确保用户电脑和网站服务器都能访问谷歌。

先登录谷歌凭据API管理平台
https://console.cloud.google.com/apis/credentials
选择【凭据】->【创建凭据】
[适用于来自浏览器的请求] 这里增加一个URL,是自己的域名。
[适用于来自 Web 服务器的请求] 这里增加一个URL, 是本代码所在的路径。

session_start();
//谷歌API ID
$googleClientID = 'xxxx.apps.googleusercontent.com';
$googleClientSecret = '谷歌秘钥';
//获取code的接口
$authorizeURL = 'https://accounts.google.com/o/oauth2/v2/auth';
//获取token的接口
$tokenURL = 'https://www.googleapis.com/oauth2/v4/token';
//
$baseURL = 'https://我的域名/本文件.php' ;//如果没有code参数,则进入code请求
if(!isset($_GET['code'])) {//生成一个随机的字符作为state$state = md5(time() . rand(1000, 9999));$_SESSION['state'] = $state;$params = array('response_type' => 'code','client_id' => $googleClientID,'redirect_uri' => $baseURL,'scope' => 'profile email','state' => $state);header('Location:'.$authorizeURL.'?'.http_build_query($params));
}
//如果有code参数,则进入token请求
if(isset($_GET['code'])) {//验证state是自己之前生成的。if(!isset($_GET['state']) || $_SESSION['state'] != $_GET['state']) {header('Location: ' . $baseURL . '?error=invalid_state');die();}// Exchange the authorization code for an access token$ch = curl_init($tokenURL);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['grant_type' => 'authorization_code','client_id' => $googleClientID,'client_secret' => $googleClientSecret,'redirect_uri' => $baseURL,'code' => $_GET['code']]));$response = json_decode(curl_exec($ch), true);//用token获取用户信息$ch = curl_init('https://www.googleapis.com/oauth2/v3/tokeninfo?id_token='.$response['id_token']);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$res= json_decode(curl_exec($ch), true);if(empty($res)){return 'authentication error!';}$email=isset($res['email'])?$res['email']:'';$name=isset($res['name'])?$res['name']:'';$pic=isset($res['picture'])?$res['picture']:'';// 构建数据, 如果数据库存在此email则直接登录,如果没有则先写入再登录$login=$this->model->login('email='.$email.');session('uid', $login->id);session('username', $login->username);session('email', $login->email);alert_location('登录成功!', Url::home('member/ucenter'), 1);
}

PHP允许用户用谷歌账号登录网站相关推荐

  1. 如何申请一个免费的域名。。在 freenom 上 并解决用谷歌账号登录不上的问题

    没有Google账号的,和按这篇文章但没成功的 看 Freenom 申请免费域名(二) 背景 想给我们班级注册一个域名,哈哈哈用来存放一些共同信息,同时记录一下解决用谷歌账号登录不上的问题 需要的东西 ...

  2. 谷歌账号登录twitter_Google会购买Twitter吗?

    谷歌账号登录twitter The latest rumor to circulate the Internet is that Google is in the final stages of ne ...

  3. 谷歌账号登录Google API Oauth 2.0简单申请和使用教程

    在点击编辑,修改回调URL 编辑完后可以参照google开发文档开发 https://developers.google.com/accounts/docs/OAuth2?hl=zh-CN 然后按照需 ...

  4. Zoom无法登录,用Apple账号,谷歌账号登录不上的问题

    zoom登录失败,电子邮件或密码不正确,apple,谷歌账号登录问题 最近好多的zoom用户出现这个问题.用所有的方法尝试登录,一直显示,电子邮件或密码不正确. 一般会出现这种问题,在ipad上面可以 ...

  5. lol手游显示无法连接谷歌服务器,《lol手游》谷歌账号登录失败如何解决 谷歌账号登录失败解决教程...

    导 读 lol手游谷歌账号登录失败怎么办?登录不上的原因有很多种,不过玩家在使用谷歌账号,并且是按照正规途径下载的游戏,却也依旧无法顺利进入到游戏当中去,这也给人一种很绝望的感觉,究竟该如何操作,才能 ...

  6. 谷歌浏览器登录不了账号_谷歌浏览器使用分享(可谷歌账号登录)之谷歌账号登录...

    由于谷歌退出中国市场以及中国网络安全法规的限制,中国大陆用户无法访问谷歌服务器,也不能使用其提供的应用,所以我们需要下载一个插件(集装箱),借此来登录谷歌账号. 1.直接网页搜索"集装箱&q ...

  7. Django 实现第三方账号登录网站

    这里我们使用 django-allauth 模块来实现第三方账号验证登录,官方文档如下:https://django-allauth.readthedocs.io/en/latest/ . 安装 dj ...

  8. 【Serverless】【认证服务】接入谷歌账号登录时提示错误码10

    [问题描述]: 项目集成了华为认证服务,将身份验证服务用于(电子邮件.电话.谷歌),使用谷歌帐户登录提示错误代码 10 . 显示错误的跟踪 : 已经检查了 SHA256,它与我的项目相同 ,下载了新的 ...

  9. 抓狂!谷歌账号又又登录异常?给你支招解决

    最近,就有很多朋友向东哥反馈说,谷歌账号登录异常了,明明账号密码都是对的,愣是登不上去,严重影响工作进度,很是捉急.所以东哥今天就总结了一份谷歌账号登录异常的解决方案,希望能帮助到大家! 谷歌账号登录 ...

最新文章

  1. 图像识别工程师 VS The application has requested the Runtime to terminate it in an unusual way.
  2. jQuery 第二章
  3. 设计模式之Facade(外观)模式
  4. JfreeChart(八)之甘特图
  5. 知乎学了python_为什么要学 Python?
  6. Ansi,UTF8,Unicode编码
  7. 【数据库】MySql分割字符串
  8. Linux安装jdk、删除Open jdk
  9. serialVersionUID 的含义
  10. 网站域名被拦截,网站被流量劫持,服务器攻击,网站被跨区恶意点击,问题的定义与解答
  11. 沪江日语频道 » 日语真题
  12. 结构化数据、半结构化数据、非结构化数据的对比
  13. LOAM系列——LeGO-LOAM配置、安装、问题解决及VLP16测试效果(完结版)
  14. 苹果XR设备多次“跳票” XR行业的未来将如何
  15. allow_pickle什么意思_Python多处理PicklingError:不能pickle
  16. linux 3.10 gro的理解和改进
  17. linux write的行为
  18. 8月9日华为发布了其自研的鸿蒙操作系统,华为正式发布自研操作系统鸿蒙
  19. GO(golang)语言使用SMTP发送电子邮件,简单和复杂带附件cc,bcc
  20. python获取网卡的ip子网掩码和网关

热门文章

  1. jQuery时间控件
  2. Apache Beam实战指南 | 玩转KafkaIO与Flink
  3. 专门写给UI设计师的高通关率面试经验+技巧
  4. CSS三:CSS的三种引入方式
  5. IDEA EasyApi导出接口到Yapi返回的数据格式未解析问题
  6. 黑龙江科技大学计算机考研资料汇总
  7. html 如何播放3pg文件,3gp是什么格式文件?3gp文件怎么打开/用什么打开?
  8. 从多迪就业数据看出为什么Python现在越来越火?
  9. 南京某公司二期安居房工程大事记
  10. java jdialog 取消关闭按钮_的JDialog关闭按钮事件