【Demo】QQ,github,微博第三方社交登錄

本文主要講解 集成 第三方社交賬號登錄

為什么會有這個需求?

主要是因為目前互聯網的網站數量太多,如果在各個站點都注冊一個賬號 用戶非常不容易記住每個賬號的用戶名和密碼,并且非常難保證每個賬號的密碼足夠安全

而目前流行的社交網站 基本上每個用戶都有賬號,如果通過這類社交網站登錄 就能得到如下幾點好處

  • 用戶不用再注冊其他賬號

  • 用戶只能維護社交賬戶足夠安全就行了,使用此社交賬號登錄的就是安全的了

常見的第三方社交賬號有哪些?

  • QQ

  • 微信

  • 新浪微博

  • 人人網

  • 百度

  • Github

如何加入第三方登錄功能?

國內這些比較大的社交公司 都有專門的開放平臺,有經驗的開發者可以看開放平臺是可以實現了,本人主要實現三個社交登錄

  • 新浪微博登錄

  • QQ登錄

  • Github登錄

申請新浪微博網頁應用

進入 http://open.weibo.com/  申請網頁應用,微博應用可以先申請等上線之后再提交審核


600


600


600


600


600

申請QQ登錄應用

進入 https://connect.qq.com/  ,登錄之后 進入 應用管理,QQ應用需要先審核通過之后才可以使用(PS: 我被駁回了4次才通過,很多項和備案信息相關的)





申請Github登錄應用

進入https://github.com/  登錄之后 進入 設置頁面


600


600


600


600


實現 QQ,微博,Github登錄功能

相關數據表

CREATE TABLE `user` (
  `uid` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用戶uid',
  `nickname` varchar(20) NOT NULL DEFAULT '' COMMENT '用戶昵稱',
  `unique_name` varchar(60) NOT NULL DEFAULT '' COMMENT '唯一標識',
  `avatar` varchar(500) NOT NULL DEFAULT '' COMMENT '用戶頭像',
  `mobile` varchar(11) NOT NULL DEFAULT '' COMMENT '用戶手機號碼',
  `updated_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '最后一次更新時間',
  `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `idx_name` (`unique_name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='用戶表';


CREATE TABLE `oauth_token` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `client_type` varchar(20) NOT NULL DEFAULT '' COMMENT '客戶端來源類型',
  `token` varchar(100) NOT NULL DEFAULT '',
  `note` varchar(1000) NOT NULL DEFAULT '' COMMENT '備注',
  `valid_to` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '有效期截止日期',
  `updated_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '最后一次更新時間',
  `createdt_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
  PRIMARY KEY (`id`),
  KEY `client_type_token` (`client_type`,`token`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='oauth token 表';


CREATE TABLE `oauth_bind` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用戶uid',
  `client_type` varchar(20) NOT NULL DEFAULT '' COMMENT '客戶端',
  `openid` varchar(80) NOT NULL DEFAULT '' COMMENT '第三方id',
  `extra` text NOT NULL COMMENT '額外字段',
  `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
  PRIMARY KEY (`id`),
  KEY `idx_client_type_opend_id` (`client_type`,`openid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='第三方登錄綁定關系';

實現架構

相關代碼文件:https://github.com/apanly/dream/tree/master/common/service/oauth  

ClientService.php   統一第三方登錄方法,應用程序的方法入口
GithubService.php  Github第三方登錄相關方法
QqService.php      QQ第三方登錄相關方法 
WeiboService.php   微博第三方登錄相關方法


實例演示

地址: http://www.pontefm.com/oauth/login ,感興趣大家可以自行前往試試


600



600


集成到商業產品需優化的地方

獲取用戶信息的相關邏輯,放入隊列處理,因為獲取信息還是比較慢的


<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>