直播APP開發,擴充套件類庫使用者、會話和第三方登入整合
直播APP開發擴充套件類庫使用者、會話和第三方登入整合,允許我將些擴充套件類庫進行開源。原來此類庫的功能只是當前開發專案中的功能,我現將其抽離成可配置使用的擴充套件類庫,以供大家共享。
此類庫主要特點有:
1、可以和第三方登入整合,包括:微信登入、微博登入、QQ登入
2、為客戶端提供了直接可以呼叫的登入介面
3、為服務端提供了直接可以檢測使用者登入態的操作
4、支援token落地、高效快取和分散式的資料庫儲存
5、展示瞭如何開發一個專案級的類庫、包括資料庫配置、翻譯等
溫馨提示:
此擴充套件類庫還在開發完善中,但已有專案在使用,感興趣的同學可以嘗試使用。
##3.8.2 安裝 ###(1)擴充套件包下載 從
$ git clone https://git.oschina.net/dogstar/PhalApi-Library.git
然後把 User 目錄複製到 ./PhalApi/Library/ 下,即:
$ cp ./PhalApi-Library/User ./PhalApi/Library/ -R
###(2)資料庫表匯入 預設下,User類庫會使用預設的資料庫配置,但有追加一些需要用到的表。因此需要匯入以下表:
$ cd /Library/User
$ tree
├── Data
│ ├── user_login_qq.sql
│ ├── user_login_sina.sql
│ ├── user_login_weixin.sql
│ ├── user_session.sql
│ └── user.sql
溫馨提示:
匯入前,可以自行調整表的字首。
###(3)資料庫配置 將 PhalApi-Library/User/Config/dbs.php 裡面的配置拷貝到你的專案配置:
//請將以下配置拷貝到 ./Config/dbs.php 檔案對應的位置中
//10張表,可根據需要,自行調整表字首、主鍵名和路由
'user_session' => array(
'prefix' => 'phalapi_',
'key' => 'id',
'map' => array(
array('db' => 'db_demo'),
array('start' => 0, 'end' => 9, 'db' => 'db_demo'),
),
),
###(4)入口註冊
//必須顯式註冊,以便可以讓服務自行初始化
DI()->userLite = new User_Lite();
###(5)其他可選配置
為了體現高效快取的好處,建議先註冊DI()->cache
為了介面更明朗的引數規則說明,建議將下而規則追加到配置檔案./Config/app.php中:
return array(
/**
* 應用介面層的統一引數
*/
'apiCommonRules' => array(
//其他原來的引數配置
...
//登入資訊
'userId' => array(
'name' => 'user_id', 'type' => 'int', 'default' => 0, 'require' => false,
),
'token' => array(
'name' => 'token', 'type' => 'string', 'default' => '', 'require' => false,
),
),
###(6)checkApiParams.php的初始化 同樣,需要在checkApiParams.php檔案顯式註冊,才能讓User這個擴充套件類庫完成自我的必要初始化:
//裝載你的介面
DI()->loader->addDirs(array('Demo', 'Library'));
DI()->userLite = new User_Lite();
否則會導致service不存在。
##3.8.3 入門使用 ###(1)對於客戶端 ####(1-1)微信登入 #####1、功能說明 實現通過微信登入,並且首次登入時,自動建立使用者並繫結。
#####2、介面URL /?service=User_User_Login.weixin + 公共引數(免登入態)
#####3、介面引數
引數 |
必須 |
預設值 |
說明 |
wx_openid |
1 |
微信OPENID |
|
wx_token |
1 |
微信TOKEN |
|
wx_expires_in |
1 |
微信失效時間 |
#####4、返回結果
#####返回欄位 引數|型別|說明 ---|---|--- info|object|登入成功後的相關資訊 user_id|int|使用者ID token|string|使用者TOKEN is_new|int|是否為首次登入,0不是,1是
#####結果示例
{
"ret": 200,
"data": {
"code": 0, //0正常登入
"info": {
"user_id": 3, //使用者ID
"token": "430C0F31FAF1FB1565E4290D1B61185A2408A6DEEA1604C1B5AEB14E44BDF2E0", //使用者TOKEN
"is_new": 0 //是否為首次登入,0不是,1是
},
"msg": ""
},
"msg": ""
}
#####請求示例
/service=User_User_Login.weixin&wx_openid=wx_122348561111&wx_token=ASDF&wx_expires_in=130000000&name=weixinName&avatar=phpunit.png
####(1-2)QQ登入 #####1、功能說明 實現通過QQ登入,並且首次登入時,自動建立使用者並繫結。
#####2、介面URL /?service=User_User_Login.qq + 公共引數(免登入態)
#####3、介面引數
引數 |
必須 |
預設值 |
說明 |
qq_openid |
1 |
QQ的OPENID |
|
qq_token |
1 |
QQ的TOKEN |
|
qq_expires_in |
1 |
QQ的失效時間 |
#####4、返回結果
#####返回欄位
引數 |
型別 |
說明 |
info |
object |
登入成功後的相關資訊 |
user_id |
int |
使用者ID |
token |
string |
使用者TOKEN |
is_new |
int |
是否為首次登入,0不是,1是 |
#####結果示例
{
"ret": 200,
"data": {
"code": 0, //0正常登入
"info": {
"user_id": 3, //使用者ID
"token": "430C0F31FAF1FB1565E4290D1B61185A2408A6DEEA1604C1B5AEB14E44BDF2E0", //使用者TOKEN
"is_new": 0 //是否為首次登入,0不是,1是
},
"msg": ""
},
"msg": ""
}
#####請求示例
/service=User_User_Login.weixin&wx_openid=wx_122348561111&wx_token=ASDF&wx_expires_in=130000000&name=weixinName&avatar=phpunit.png
####(1-4)使用者資訊
#####1、功能說明 獲取使用者個人資訊
#####2、介面URL /?service=User_User_Info.getUserInfo + 公共引數
#####3、介面引數
引數 |
必須 |
預設值 |
說明 |
other_user_id |
1 |
使用者id |
#####4、返回結果
#####返回欄位
引數 |
型別 |
說明 |
info |
object |
登入成功後的相關資訊 |
user_id |
int |
使用者ID |
username |
string |
使用者名稱 |
nickname |
string |
使用者暱稱 |
avatar |
string |
使用者頭像url |
#####結果示例
{
"ret": 200,
"data": {
"code": 0,
"info": {
"username": "aevit",
"nickname": "test",
"avatar": "",
"user_id": 1
},
"msg": ""
},
"msg": ""
}
#####請求示例 /service=User_User_Info.getUserInfo&other_user_id=1
###(2)對於服務端 ####(1)溫柔式檢測登入態
$isLogin = DI()->userLite->check();
####(2)強制式檢測登入態
DI()->userLite->check(true);
####(3)更多操作 當需要對使用者進行退出登入時,可以在介面中執行:
DI()->userLite->logout();
當需要為使用者新建一個會話時,可以在介面中執行:
DI()->userLite->generateSession(1); //假設使用者ID為1
當需要為使用者延長登入態有效時間時(預設為一個月),可以在介面進行心跳操作,從而再延長一個月有效時間:
DI()->userLite->heartbeat();
##3.8.4 示例 ###(1)假設在我們的應用的介面中:
<?php
class Api_Test extends PhalApi_Api {
public function go() {
Di()->userLite->check(true);
return 'ok';
}
}
###(2)先呼叫微信的登入:
/user/?service=User_User_Login.Weixin&wx_openid=wx_122348561111&wx_token=ASDF&wx_expires_in=130000000&name=weixinName&avatar=phpunit.png
返回:
{
"ret": 200,
"data": {
"code": 0,
"info": {
"user_id": 94,
"token": "8509BE9C80B67009C559E6A2C4B88E02C885DA6B9FEFFC2DA080999377D08FBF",
"is_new": 0
},
"msg": ""
},
"msg": ""
}
###(3)再呼叫我們應用 的介面:
/user/?service=Test.go&user_id=94&token=CE1218493B3A441FCF630E24E98FD3640133EBA6D734C90A620A11C07CE35323
返回:
{"ret":200,"data":"ok","msg":""}
###(4)未登入下,返回:
{"ret":401,"data":[],"msg":"\u975e\u6cd5\u8bf7\u6c42\uff1auser not login"}
以上就是直播APP開發中擴充套件類庫使用者、會話和第三方登入整合,詳細的例項說明。