本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 3258|回复: 0
打印 上一主题 下一主题

PHP教程:Google Oauth登录系统开发示例[转]

[复制链接]
跳转到指定楼层
1#
发表于 2012-10-28 12:27:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在这之前,我们已经覆盖了包含Facebook、Twitter、Google plus以及Instagram的Oauth登录系统示例。很遗憾之前我遗漏掉了Google的Oauth登录系统。今天我们就来看一下如何为你的web项目实现Google的Oauth系统。这个示例脚本非常快,对增加你的web项目注册当然是很有帮助的。



Google Oauth登录系统开发示例


在线Demo:Live Demo

数据库设计

数据库设计很简单,如下所示:
  1. CREATE TABLE users
  2. (
  3. id INT PRIMARY KEY AUTO_INCREMENT,
  4. email VARCHAR(50) UNIQUE,
  5. fullname VARCHAR(100),
  6. firstname VARCHAR(50),
  7. lastname VARCHAR(50),
  8. google_id VARCHAR(50),
  9. gender VARCHAR(10),
  10. dob VARCHAR(15),
  11. profile_image TEXT,
  12. gpluslink TEXT
  13. )
复制代码
1.域名注册

这里注册或者添加你的域名。



域名注册




2.所有权认证

验证您的域名所有权,可以通过HTML文件上传或包括META标记。



所有权认证



3.OAuth Keys
谷歌将提供你OAuth用户密钥和OAuth秘密密钥。


Oauth keys


4. Google API控制台

Google API控制台创建客户端ID。



Google API控制台




Google API控制台


然后你就可以看见你的客户端ID和密钥。



配置好的Google Oauth信息



config.php
你可以在src文件夹找到这个文件,在这里您需要配置应用程序OAuth密钥,Consumer keys和重定向回调URL。
  1. // OAuth2 Settings, you can get these keys at https://code.google.com/apis/console Step 6 keys
  2. 'oauth2_client_id' => 'App Client ID',
  3. 'oauth2_client_secret' => 'App Client Secret',
  4. 'oauth2_redirect_uri' => 'http://yoursite.com/gplus/index.php',

  5. // OAuth1 Settings Step 3  keys.
  6. 'oauth_consumer_key' => 'OAuth Consumer Key',
  7. 'oauth_consumer_secret' => 'OAuth Consumer Secret',
复制代码
google_login.php

Google plus登录系统,你只需要在index.php中加载这个文件。
  1. <?php
  2. require_once 'src/apiClient.php';
  3. require_once 'src/contrib/apiOauth2Service.php';
  4. session_start();
  5. $client = new apiClient();
  6. setApplicationName("Google Account Login");
  7. $oauth2 = new apiOauth2Service($client);
  8. if (isset($_GET['code']))
  9. {
  10. $client->authenticate();
  11. $_SESSION['token'] = $client->getAccessToken();
  12. $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
  13. header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
  14. }

  15. if (isset($_SESSION['token'])) {
  16. $client->setAccessToken($_SESSION['token']);
  17. }

  18. if (isset($_REQUEST['logout'])) {
  19. unset($_SESSION['token']);
  20. unset($_SESSION['google_data']); //Google session data unset
  21. $client->revokeToken();
  22. }

  23. if ($client->getAccessToken())
  24. {
  25. $user = $oauth2->userinfo->get();
  26. $_SESSION['google_data']=$user; // Storing Google User Data in Session
  27. header("location: home.php");
  28. $_SESSION['token'] = $client->getAccessToken();
  29. } else {
  30. $authUrl = $client->createAuthUrl();
  31. }

  32. if(isset($personMarkup)):
  33. print $personMarkup;
  34. endif

  35. if(isset($authUrl))
  36. {
  37. echo "<a class="login" href="$authUrl">Google Account Login</a>";
  38. } else {
  39. echo "<a class="logout" href="?logout">Logout</a>";
  40. }
  41. ?>
复制代码
home.php

在这里我们需要向之前创建的user表插入Google plus的session信息。代码如下:
  1. <?php
  2. session_start();
  3. include('db.php'); //Database Connection.
  4. if (!isset($_SESSION['google_data'])) {
  5. // Redirection to application home page.
  6. header("location: index.php");
  7. }
  8. else
  9. {
  10. //echo print_r($userdata);
  11. $userdata=$_SESSION['google_data'];
  12. $email =$userdata['email'];
  13. $googleid =$userdata['id'];
  14. $fullName =$userdata['name'];
  15. $firstName=$userdata['given_name'];
  16. $lastName=$userdata['family_name'];
  17. $gplusURL=$userdata['link'];
  18. $avatar=$userdata['picture'];
  19. $gender=$userdata['gender'];
  20. $dob=$userdata['birthday'];
  21. //Execture query
  22. $sql=mysql_query("insert into users(email,fullname,firstname,lastname,google_id,gender,dob,profile_image,gpluslink) values('$email','$fullName','$firstName','$lastName','$googleid','$gender','$dob','$avatar','$gplusURL')");
  23. ?>
复制代码
db.php

数据库配置文件。
  1. <?php
  2. $mysql_hostname = "localhost";
  3. $mysql_user = "username";
  4. $mysql_password = "password";
  5. $mysql_database = "databasename";
  6. $bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
  7. mysql_select_db($mysql_database, $bd) or die("Could not select database");
  8. ?>
复制代码
下面我们提供了示例源码的下载地址:

googlelogin.zip (203.73 KB, 下载次数: 45)



原文链接:9lessons.com

本文由PHP爱好者原创翻译。

ChinaGDG.com
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表