摘要:微博登錄是最常用的第三方賬號登錄之一。當前狀態是未提交審核,待你開發完了上線后,提交微博審核,審核通過后即可正常使用。集成微博登錄首先簡介一下,第三方登錄開發的流程。文件是首頁,其實他的唯一作用就是產生一個微博登錄跳轉鏈接。
微博登錄是最常用的第三方賬號登錄之一。由于其網站用戶量大,可操作接口功能多,所以受到很多開發者的青睞。
既然是第三方,如果想使用它們的賬號進行登錄,那么第一步就應該申請一個開發賬號。
前面啰嗦兩句,這里有兩個條件是硬性的,否則將影響你的開發。
微博賬號,這個應該都有。
域名和服務器,也就是說你要有你自己的網站。不過為公司開發就方便多了。
申請開發賬號首先去微博開放平臺:http://open.weibo.com/connect,點擊立即接入,填寫一個表單,驗證一下網站就OK了
之后你在我的應用里面就可以看到你申請的應用。當前狀態是未提交審核,待你開發完了上線后,提交微博審核,審核通過后即可正常使用。(未審核之前只能是測試賬號訪問)
到這一步為止,我們就可以先進行開發工作。進入網站信息頁面,首先獲取我們需要的app_id和secret信息。
下面我們進入開發,我們這里使用YII2框架,高級版本。其他框架原理相同。
YII2集成微博登錄首先簡介一下,第三方登錄開發的流程。
通過填入各項參數,生成一個URL鏈接,跳轉到微微博。
微博驗證完這些參數有效之后,跳轉回你給定的返回地址,同時帶上一個參數code
你獲取到code參數后,用code作為參數,請求一個地址,獲取token
該token就是你的鑰匙,拿著它你可以獲取微博的所有可訪問接口。(比如獲取用戶信息,獲取用戶ID),所以要收好了,我們把它放session
下面就是你自己網站業務邏輯了。
1、新建數據表第一步,我們來建立網站常用的業務數據表,來開發賬號綁定功能。我們需要兩張表。
用戶表CREATE TABLE `br_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_nickname` varchar(30) NOT NULL, `user_password` varchar(80) NOT NULL, `user_email` varchar(255) NOT NULL, `auth_key` varchar(128) DEFAULT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `USEREMAIL` (`user_email`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT="用戶信息表";第三方賬號表
CREATE TABLE `br_open_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "微信登錄id", `open_id` varchar(64) NOT NULL COMMENT "第三方登錄的open_id", `user_id` int(11) NOT NULL COMMENT "網站用戶ID", `nickname` varchar(300) NOT NULL COMMENT "第三方用戶昵稱", `type` tinyint(1) NOT NULL DEFAULT "1" COMMENT "1:微博", `create_time` int(11) unsigned NOT NULL COMMENT "創建時間", PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8;
用戶表沒什么好說的,我們說一下第三方信息表。
open_id是第三方登錄時候給你的一個用戶唯一標識,不會改變。
user_id為你自己網站的用戶ID,這樣可以把本站用戶和第三方賬號關聯了起來。
nickname這個字段看需求,一般存放第三方用戶昵稱,而本站的用戶昵稱還是存在用戶表,這樣假設用戶不想用第三方昵稱,可以隨意修改而也保留第三方昵稱。
type的作用重點是,你網站可能不止使用一個第三方登錄,比如微博,qq,微信,這樣我們做個區分。
2、整合代碼開發之前,我們要先去微博官網下載一個SDK來加速我們的開發。畢竟人家都寫好了,拿來用比較方便。
下載下來大概長這個樣子:
其中saetv2.ex.class.php是他的核心文件,其他文件基本都是輔助作用。
index.php文件是首頁,其實他的唯一作用就是產生一個微博登錄跳轉鏈接。
config.php是一些配置文件,就是你剛剛從官網申請來的app_id之類的
callback.php是你跳轉到微博后,它再跳轉回來的一個地址。
weibolist.php是授權成功后,你獲取到他的微博列表的一個demo
這個文件夾文件可以直接放在網站根目錄訪問,不過我們不準備這樣做,我們要把他們拆分了,直接集成到YII
首先針對config.php文件,這個也最簡單,我們打開它,發現只有幾行代碼。
其實就是配置了app_id,app_secret,callback我們把他們扔到Yii配置文件params.php
"weibo"=>[ "app_key"=>"你的app_key", "app_secret"=>"你的app_secret", "back_url"=>"你的回跳地址,比如:http://www.bidianer.com/login/weibo-back(這是我的)" ],下面我們看下,saetv2.ex.class.php,打開后我們發現,這個文件里面有兩個類,為了便于開發,我們將其拆分成為2個文件存放。第一個文件存放靠上面的類,第二個文件存放靠下面的類。同時,我們將其拷貝到Yii2目錄vendor/yiisoft/yii2/web,這個隨自己喜歡。
我們將拆分后的文件命名為SaeAuth.php和SaeTClientV2.php,類名同文件名。同時加上命名空間yii web(這里反斜杠打不出來)。
3、控制器開發下面我們來到控制器開始做真正開發工作。
1、新建LoginController.php,在init方法中,我們將配置信息加載過來:
$this->app_key = Yii::$app->params["weibo"]["app_key"]; $this->app_secret = Yii::$app->params["weibo"]["app_secret"]; $this->back_url = Yii::$app->params["weibo"]["back_url"];2、新建登錄首頁index方法,同時生成微博跳轉鏈接
$sea = new SaeAuth($this->app_key , $this->app_secret); $weibo_url = $sea->getAuthorizeURL($this->back_url);在此之前你需要 use yii web SaeAuth(這里反斜杠打不出來)
3、接下來我們新建weibo-back方法來處理微博回跳后處理。
獲取微博返回參數code
$code = Yii::$app->request->get("code");獲取token
$sea = new SaeAuth($this->app_key , $this->app_secret); if ($code) { $keys = array(); $keys["code"] = $code; $keys["redirect_uri"] = $this->back_url; try { $token = $sea->getAccessToken( "code", $keys ) ; } catch (Exception $e) { throw new NotFoundHttpException; } }下面如果獲取token成功,我們就將其放入session存起來,留著后面用
if ($token) { $session = Yii::$app->session; $session["token"] = [ "access_token"=>$token["access_token"], "uid"=>$token["uid"], "lifetime"=> 24*3600 // 這里我設置了一天,你們可以自己設置合適時間 ]; $this->redirect(Url::toRoute("/login/complete-info")); }為啥我們不在這個頁面處理其他邏輯?因為,code不能重復利用,啥意思?就是在這個頁面:http://www.bidianer.com/login/weibo-back?code=XXXX你不能刷新,否則微博就給你個錯誤。所以我們拿到code獲取token,就趕緊放session跑路,到其他頁面,慢慢弄。
4、完善用戶信息
下面我們到一個關鍵步奏了,這個方法主要做兩件事,判斷用戶是否綁定賬號,如果沒有,顯示表單,補全信息綁定。如果綁定了,OK,直接自動登錄,跳走。
下面先進行簡單的一步:檢測用戶是否綁定賬號。
之前br_open_info表有個字段叫open_id這是微博給你的一個用戶唯一識別碼,而且不會變。下次第三方請求后,我們可以從微博獲取這個open_id去數據庫查詢一下,如果存在,則用戶已經綁定過。反之,未綁定。
我們session中放著token,我們可以利用它去獲取用戶唯一ID
$token = Yii::$app->session->get("token"); $c = new SaeTClientV2( $this->app_key , $this->app_secret , $token["access_token"] ); $uid_get = $c->get_uid(); $uid = $uid_get["uid"];下面在common/models中新建OpenInfo.php,直接調用查詢:
$open_user = OpenInfo::findOne(["open_id"=>$uid , "type"=>"1"]); // 其中 type = 1 代表微博。如果存在,則說明用戶已經綁定賬號,直接自動登錄。
if($open_user) { $user = User::findOne($open_user->user_id); // 當open_info信息存在,則直接取其user_id去用戶表查詢用戶信息 Yii::$app->user->login($user, 3600 * 24 * 30); $this->goHome(); }如果沒有綁定,我們獲取用戶基本信息,展示用戶補全信息表單,填寫綁定賬號。
$user_message = $c->show_user_by_id( $uid);//根據ID獲取用戶等基本信息 return $this->render("completeInfo",["info"=>$user_message]);我們到completeInfo視圖打印下用戶信息:
還是非常詳細的。啥都有。
我們把用戶頭像展示在表單頂端,幫助用戶自動填寫昵稱(用微博昵稱),讓用戶填寫下郵箱和密碼,補全資料,然后提交,綁定賬號。
4、用戶注冊這樣用戶設置完郵箱和密碼后,就可以注冊。這里的注冊和你網站賬號注冊流程一致。
不過在這里提交表單時候,我們需要多提交一些信息,我們把這些信息放在表單隱藏域中。
" /> // 頭像 " /> // 微博用戶唯一識別碼 " /> // 微博用戶昵稱這樣當用戶插入到br_user表之后,我們將本地用戶賬號和第三方用戶賬號關聯。即在br_open_info表插入一條數據。
注冊代碼
$user = new User(); $user->setPassword($post["user_password"]); $user->generateAuthKey(); $user->user_nickname = $post["user_nickname"]; $user->user_email = $post["user_email"]; $user->user_headimg = isset($post["user_headimg"])? $post["user_headimg"] : null; $user->save();注冊成功后,我們將獲得user_id
5、賬號綁定下面進行賬號綁定
$open = new OpenInfo(); $open->open_id = $post["open_id"]; $open->user_id = $user->user_id; $open->nickname = $post["open_nickname"]; $open->type = 1; // type=1為微博 $open->create_time = time(); if($open->validate()) { $open->save(); }下次當該用戶再次點擊微博登錄按鈕,就會執行以下操作
跳轉到微博獲取code,回跳到網站頁面
通過code獲取token,將token放入session
通過token獲取微博用戶open_id
通過open_id去第三方用戶信息表br_open_info查詢
如果發現有記錄,則根據br_open_info表存儲的user_id去br_user表獲取用戶信息
自動登錄,直接跳轉走
整個過程用戶無需輸入任何賬號密碼信息,十分便捷。
嚴穎 2016-09-28
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30510.html
摘要:極致的插件機制,系統內的系統,安裝和卸載不會對原來的系統產生影響強大的功能完全滿足各階段的需求,支持用戶多端訪問后臺微信前臺等,系統中的系統。多入口模式,多入口分為后臺前端,微信,對內接口,對外接口,不同的業務,不同的設備,進入不同的入口。 RageFrame 2.0 為二次開發而生,讓開發變得更簡單 項目地址:https://github.com/jianyan74/... 前言 這...
摘要:極致的插件機制,系統內的系統,安裝和卸載不會對原來的系統產生影響強大的功能完全滿足各階段的需求,支持用戶多端訪問后臺微信前臺等,系統中的系統。多入口模式,多入口分為后臺前端,微信,對內接口,對外接口,不同的業務,不同的設備,進入不同的入口。 RageFrame 2.0 為二次開發而生,讓開發變得更簡單 項目地址:https://github.com/jianyan74/... 前言 這...
摘要:多入口模式,多入口分為后臺前端,微信,其他或接口對接,不同的業務不同的設備進入不同的入口。對接微信公眾號,使用了一款優秀的微信非官方,系統內已集成了該,調用方式會在文檔說明,也可直接看其文檔進入深入開發。 RageFrame 為二次開發而生,讓開發變得更簡單。 前言 RageFrame項目創建于2016年4月16日,基于Yii2框架開發的應用開發引擎,目前正在成長中,目的是為了集成更多...
閱讀 2883·2021-09-22 15:20
閱讀 2958·2021-09-22 15:19
閱讀 3446·2021-09-22 15:15
閱讀 2381·2021-09-08 09:35
閱讀 2372·2019-08-30 15:44
閱讀 3003·2019-08-30 10:50
閱讀 3706·2019-08-29 16:25
閱讀 1585·2019-08-26 13:55